Чужие DLL
Тут такое дело. Загружаю DLL написанную на дельфях. Отсылаю туда текст, его функция и должна вернуть. А DLL вместо исходного текста принимает текст: "ZP" и кучу пробелов. Билдер в качестве ответного текста принимает пустой текст. К чему бы это?
Как объявлена функция в dll??Как отсылаешь текст??В виде AnsiString? Если dll написана правильно то скорее всего надо пересылать не AnsiString а char*
Как объявлена функция в dll??Как отсылаешь текст??В виде AnsiString? Если dll написана правильно то скорее всего надо пересылать не AnsiString а char*
Вот вся функция:
function rec_in(obozn: Pchar): Pchar;export;stdcall;
var mystr: Pchar;
begin
mystr:=obozn;
messagedlg(mystr, mtInformation,[mbOk], 0);
rec_in:=mystr;
end;
А текст я и так пересылаю как char*.
Вот вся функция:
function rec_in(obozn: Pchar): Pchar;export;stdcall;
var mystr: Pchar;
begin
mystr:=obozn;
messagedlg(mystr, mtInformation,[mbOk], 0);
rec_in:=mystr;
end;
А текст я и так пересылаю как char*.
А из своей проги ты ее как дергаешь??Функцию эту.
А из своей проги ты ее как дергаешь??Функцию эту.
Лови весь обработчик
char* (__stdcall *rec_in)(char* str);
HINSTANCE dll=LoadLibrary("mydll.dll");
if(dll)
{
rec_in=(char*(__stdcall*)(char*))GetProcAddress(dll,"rec_in");
if(rec_in) ShowMessage(rec_in("rabotaet!!!"));
else ShowMessage("LLLLL");
}
else ShowMessage("HHHHH");
FreeLibrary(dll);
Лови весь обработчик
char* (__stdcall *rec_in)(char* str);
HINSTANCE dll=LoadLibrary("mydll.dll");
if(dll)
{
rec_in=(char*(__stdcall*)(char*))GetProcAddress(dll,"rec_in");
if(rec_in) ShowMessage(rec_in("rabotaet!!!"));
else ShowMessage("LLLLL");
}
else ShowMessage("HHHHH");
FreeLibrary(dll);
А попробуй вот так:
typedef char* (__import __stdcall *recin)(char*);
recin rec_in;
HINSTANCE dll=LoadLibrary("mydll.dll");
if(dll)
{
rec_in=(recin)GetProcAddress(dll,"rec_in");
if(rec_in) ShowMessage(rec_in("rabotaet!!!"));
else ShowMessage("LLLLL");
}
А попробуй вот так:
typedef char* (__import __stdcall *recin)(char*);
recin rec_in;
HINSTANCE dll=LoadLibrary("mydll.dll");
if(dll)
{
rec_in=(recin)GetProcAddress(dll,"rec_in");
if(rec_in) ShowMessage(rec_in("rabotaet!!!"));
else ShowMessage("LLLLL");
}
Результат тот же. :sad:
Результат тот же. :sad:
Ну что я могу сказать...кидай свою dll попробую сам прицепить, как прицеплю напишу как это сделал.