![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как передать в процедуру 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 не устроил?