![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
pointers and dll [D7, WinXP]
deplhi © (2006-08-21 15:05:00)
tagInArg = record
Reserved, in_struct: Pointer;
end;
tag_struct_out3 = record
info1: array [0..11] of char;
info2: array [0..11] of char;
end;
tagOutArg2 = record
ErrorCode, Flags: LongWord;
Reserved: Pointer;
out_struct: ^tag_struct_out3;
end;
..............................
procedure Tbb_.myfunc;
var inArg: tagInArg;
p, p2:^tag_struct_out3;
outArg2:tagOutArg2;
out3:tag_struct_out3;
begin
inArg.Reserved := nil;
inArg.in_struct := nil;
outArg2.Flags := 0;
outArg2.out_struct := @p;
outArg2.Reserved := nil;
outArg2.ErrorCode := 0;
_call_dll_function(12, @inArg, @outArg2);
p2:= @outArg2.out_struct;
out3.info1 := p2.info1;
out3.info2 := p2.info2;
//Res:=outArg2.ErrorCode;
//r2:=p.TrxTime;
end;
Проблема в следующем: я при помощи функции _call_dll_function обращаюсь к библиотеке написанной на сях. у нее три параметра. нас интересует только третий - по нему передается указатель на структуру в которую вызываемая библиотека запишет выходные данные. ну так вот - в структуре out3 в итоге получается всякая хрень, чего быть не должно. Наверняка я в работе с указателями делаю ошибки. Нет времени разбираться самому, так что помогите советом кто знает
clickmaker (2006-08-21 16:14:00) [1]не вижу, где выделяется память под out_struct?
deplhi (2006-08-21 16:04:00) [2]
> Приведи объявление С-шной функции и как она у тебя описана
extern “C” DWORD call_dll_function(
DWORD func,
void *in_arg,
void *out_arg);
void *in_arg
Указатель на структуру, содержащую параметры, передаваемые функции. Структура опи-сана следующим образом.
typedef struct tagInArg{
void *Reserved;
void *in_struct;
} InArg;
void *out_arg
Указатель на структуру, в которой возвращается результат. Структура описана следую-щим образом.
typedef struct tagOutArg{
DWORD ErrorCode;
DWORD Flags;
void *Reserved;
void *out_struct;
} OutArg;
в данном случае *out_struct - указывает на структуру tag_struct_out3
а у мну в коде описана она так:
function _call_dll_function(func: LongWord; in_arg, out_arg: pointer):LongWord; cdecl;
external 'mydll.dll';
MBo (2006-08-21 15:34:00) [3]>Наверняка я в работе с указателями делаю ошибки
Похоже на то...
Приведи объявление С-шной функции и как она у тебя описана