Страница 1 из 1

Delphi DLL в Visual C++

Добавлено: 09 июл 2004, 17:44
Borys
У меня такая проблема.
Есть длл на Делфи. Необходимо динамически подключить ее к проге на вижуале. Проблема в том, что я не могу передать правильно параметры. До длл на Делфи они доходят неправильно (я писал длл на С++ там все нормально). По видимому прблема в cflling conventions.
Пытался использовать stdcall и WINAPI результатов не дало.
Вот часть на делфи:
function ShowForm(c: LPCSTR; h: HWND; d: LPCSTR):HWND;
begin
Form1:=TForm1.Create(Application);
Form1.Edit1.Text:=c;
Form1.Edit2.Text:=inttostr(h);
form1.Edit3.Text:=d;
Form1.Show;
ShowForm:=Form1.WindowHandle;
ShowMessage(c+', '+d);
end;

Вот вызов на вижуале:
typedef HWND (* PTShowForm)(LPCSTR, HWND, LPCSTR);
PTShowForm TShow;
hDLL=LoadLibrary(dllname);
if (hDLL!=0)
{
TShow = (PTShowForm)GetProcAddress(hDLL,"ShowForm");
dllhwnd=TShow((LPCSTR)str1, GetSafeHwnd(), (LPCSTR)str2);
}

Вообще я пытаюсь вставить диалог на Делфи (длл) в прогу на вижуале. Получается довольно скверно. Постоянно приходиться обходить всякие пакости. Может кто-то подобное делал и может подсказать решение.

Добавлено: 09 июл 2004, 18:37
Eugie
А вот топики дублировать не надо

Добавлено: 10 июл 2004, 15:25
Borys
Ошибка в следующем:
Я в вижуале вызываю функцию:
TShow((LPCSTR)str1, GetSafeHwnd(), (LPCSTR)str2);
Открывается окно делфийского приложения. Оно получает параметры не так как нужно. Например в вижуале str1--"7006", HWND -- число и str2--"Не выбран".
В делфи-диалоге пулучается:
str1="Um'j"
HWND--число, но не то которое было.
str2=7006"(=str1)
Если использовать stdcall(Delphi) и WINAPI(C++) то параметры вроде передаются правильно(по крайней мере строки), но приложение падает.

Добавлено: 10 июл 2004, 15:29
Borys
Пошел на эту низость только ввиду того, что программисты С++ не очень любят форумы по Делфи и наоборот :-). Хотя вопрос касается и первых и вторых.

Добавлено: 14 июл 2004, 01:26
Naeel Maqsudov
Пытался использовать stdcall и WINAPI результатов не дало.
Вот часть на делфи:
function ShowForm(c: LPCSTR; h: HWND; d: LPCSTR):HWND;
begin
Не вижу тут использования stdcall!
Кроме stdcall имеется еще и cdecl отличается как раз порядком передачи аргументов. В C и Pascal этот порядок противоположный.