Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как передать в процедуру dll параметр [D5]


Комбинатор ©   (2004-07-10 22:26:00) 

Как передать в процедуру dll параметр в виде типизированного указателя?

procedure GET_DATA(const DataInput:^BYTE;DataOutput:^BYTE;LengthDataInput:Integer);export;stdcall;

В таком заголовке символы ^BYTE не рассматриваются компилятором как тип указателя и он выдаёт:

"Identifier expected but '^' found"

В чём проблема? Подскажите пожалуйста.


evvcom   (2004-07-11 02:40:00) [1]


> Смысл - показать принцип

Да, конечно.

> а не то что это уже гдето есть...

Но и об этом тоже надо помнить, иначе потом начнут вылазить ошибки, а неподготовленный начинающий программер будет макушку тереть "И чего это этому Delphi не нравится?" Например, где-то будет объявлено
var
 a: PByte; // Windows.PByte
а потом
type
 PByte = ^Byte;
var
 b: PByte; // это уже MyUnit.PByte
и начнутся присвоения
 b := a; // Incompatible types: ...


Palladin   (2004-07-11 02:21:00) [2]


> тоже писать необязательно, так как этот тип уже определен
> в Windows, Types и System.

Смысл - показать принцип, а не то что это уже гдето есть...


jack128   (2004-07-11 02:19:00) [3]


> Разницы не будет никакой "с точки зрения системы", если
> употребить
чесно говоря "с точки зрения системы" разницы не будет даже если мы запишем
procedure GET_DATA(const DataInput: LongInt; DataOutput: Cardinal; LengthDataInput: Pointer);  ;-)  Главное, чтоб размеры типов совпадали..


evvcom   (2004-07-11 02:14:00) [4]

Причем

> Type
> PByte=^Byte;

тоже писать необязательно, так как этот тип уже определен в Windows, Types и System.

> Шаблон....это то есть мне дали заголовок процедуры и я должен
> его придерживаться...

Разницы не будет никакой "с точки зрения системы", если употребить
procedure GET_DATA(const DataInput: PByte; DataOutput: PByte; LengthDataInput: Integer);
или
procedure GET_DATA(const DataInput: PChar; DataOutput: PChar; LengthDataInput: Integer);


Комбинатор   (2004-07-11 00:04:00) [5]

Спасибо.


Palladin   (2004-07-10 23:28:00) [6]


> Почему?

Почему солнце не квадратное?


> Не уж то писать name:pointer;?

Type
PByte=^Byte; //что практически эквивалентно PChar...

procedure GET_DATA(const DataInput:PByte;DataOutput:PByte;LengthDataInput:Integer);export;stdcall;


Комбинатор   (2004-07-10 23:25:00) [7]

> Вообще в dll писать возможно все, не возможно так писать в декларации процедуры или функции...
Почему?

Шаблон....это то есть мне дали заголовок процедуры и я должен
его придерживаться...

Почему нельзя писать ^type  в декларации процедуры...
Не уж то писать name:pointer;?


Palladin   (2004-07-10 23:10:00) [8]

ты думаешь ^byte отличается от ^array [1...многомилионов] of integer; ?
или может pointer отличается от них всех с точки зрения системы?


> У меня есть шаблон, которого должен придерживаться

смысла этой фразы мне вообще не понятен... Шаблон. Что за шаблон? Проектирования? Ни разу не видел шаблонов с ^BYTE... которого должен придерживатся кто?..


> Вообще в dll писать ^type возможно?

Вообще в dll писать возможно все, не возможно так писать в декларации процедуры или функции...


Комбинатор   (2004-07-10 23:06:00) [9]

Вообще в dll писать ^type возможно?


Комбинатор   (2004-07-10 23:04:00) [10]

У меня есть шаблон, которого должен придерживаться.


Palladin   (2004-07-10 22:47:00) [11]

чем pchar не устроил?


Наверх

Титульная страница Поиск, карта сайта Написать письмо