Проблема с вызовом функций из Delphi DLL
От: aset  
Дата: 13.11.06 12:22
Оценка:
Привет всем!

Столкнулся со странной проблемой: при вызове функции, объявленной следующим образом:
function SomeFunction(var Buffer: array of byte): LongBool; stdcall;


методом, описанным ниже:
typedef BOOL __stdcall FNSOMEFUNCTION(OUT PVOID Buffer);
HMODULE hLib = LoadLibrary("somelib.dll");
FNSOMEFUNCTION* pfSF = (FNSOMEFUNCTION*) GetProcAddress(hLib, "SomeFunction");
char* pBuf = (char*)calloc(2, 30);
pfSF(pBuf);


по выходе из функции портится стек (esp больше нужного на 4).

Что интересно, функции, не имеющие конструкции "var ...: array of byte" в параметрах отрабатывают нормально.

В чем может быть проблема?
Re: Проблема с вызовом функций из Delphi DLL
От: AK85 Беларусь  
Дата: 13.11.06 15:02
Оценка:
Здравствуйте, aset, Вы писали:

A>Привет всем!


A>Столкнулся со странной проблемой: при вызове функции, объявленной следующим образом:

A>
A>function SomeFunction(var Buffer: array of byte): LongBool; stdcall;
A>

A>по выходе из функции портится стек (esp больше нужного на 4).

A>Что интересно, функции, не имеющие конструкции "var ...: array of byte" в параметрах отрабатывают нормально.


A>В чем может быть проблема?


Возможно в том, что дельфийский array of Byte не просто char*, а включает в себя память под размер массива, которую надо проинициализировать перед передачей в функцию.
Re: Проблема с вызовом функций из Delphi DLL
От: Tonal- Россия www.promsoft.ru
Дата: 13.11.06 16:39
Оценка:
Здравствуйте, aset, Вы писали:

A>Привет всем!


A>Столкнулся со странной проблемой: при вызове функции, объявленной следующим образом:

A>
A>function SomeFunction(var Buffer: array of byte): LongBool; stdcall;
A>


A>методом, описанным ниже:

A>
A>typedef BOOL __stdcall FNSOMEFUNCTION(OUT PVOID Buffer);
//Вот так будет правильно:
typedef BOOL __stdcall FNSOMEFUNCTION(char* Buffer, DWORD BufLen);
A>


Или можно явно передать указатель на char и его длинну.
Т.е:
function SomeFunction(Buffer: pChar; BufLen: LongWord): LongBool; stdcall;
Re[2]: Проблема с вызовом функций из Delphi DLL
От: aset  
Дата: 14.11.06 08:11
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>Здравствуйте, aset, Вы писали:


A>>Привет всем!


A>>Столкнулся со странной проблемой: при вызове функции, объявленной следующим образом:

A>>
A>>function SomeFunction(var Buffer: array of byte): LongBool; stdcall;
A>>


A>>методом, описанным ниже:

A>>
A>>typedef BOOL __stdcall FNSOMEFUNCTION(OUT PVOID Buffer);
T>//Вот так будет правильно:
T>typedef BOOL __stdcall FNSOMEFUNCTION(char* Buffer, DWORD BufLen);
A>>


T>Или можно явно передать указатель на char и его длинну.

T>Т.е:
T>
T>function SomeFunction(Buffer: pChar; BufLen: LongWord): LongBool; stdcall;
T>


Спасибо, заработало
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.