Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.09.10;
Скачать: CL | DM;

Вниз

pointers and dll   Найти похожие ветки 

 
deplhi   (2006-08-21 15:05) [0]

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 в итоге получается всякая хрень, чего быть не должно. Наверняка я в работе с указателями делаю ошибки. Нет времени разбираться самому, так что помогите советом кто знает


 
MBo ©   (2006-08-21 15:34) [1]

>Наверняка я в работе с указателями делаю ошибки
Похоже на то...

Приведи объявление С-шной функции и как она у тебя описана


 
deplhi   (2006-08-21 16:04) [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";


 
clickmaker ©   (2006-08-21 16:14) [3]

не вижу, где выделяется память под out_struct?



Страницы: 1 вся ветка

Текущий архив: 2006.09.10;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.032 c
15-1155914187
DesWind
2006-08-18 19:16
2006.09.10
Как вы относитесь к технике?


15-1155471301
Desdechado
2006-08-13 16:15
2006.09.10
Что скажете о качестве дисков Omega


6-1145621614
dest81
2006-04-21 16:13
2006.09.10
IdSMTP и ProgressBar


2-1156249993
AlexanderMS
2006-08-22 16:33
2006.09.10
Поддержка плагинов.


15-1155623597
rimm
2006-08-15 10:33
2006.09.10
#13