Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.101 c
2-1156214930
Ref
2006-08-22 06:48
2006.09.10
Отчет


2-1156145761
Селезин
2006-08-21 11:36
2006.09.10
Разбиение строки в масив


1-1153992363
oleg___
2006-07-27 13:26
2006.09.10
Реализация интерфейса


2-1155831546
pvi
2006-08-17 20:19
2006.09.10
Сетевая папка или нет


1-1153901887
TUser
2006-07-26 12:18
2006.09.10
Цикл for, так нелюбимый компилятором





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский