Главная страница
    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.047 c
3-1152194411
freak
2006-07-06 18:00
2006.09.10
Помогите определить связи


4-1147544916
parovoZZ
2006-05-13 22:28
2006.09.10
Аналог TWebBrowser-а на апях


1-1153935791
Calibr
2006-07-26 21:43
2006.09.10
Прозрачность


2-1155916392
kami
2006-08-18 19:53
2006.09.10
Коннект 2-х TServerSocket


2-1155815298
fast2
2006-08-17 15:48
2006.09.10
Что неправильно в условии:





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский