Delphi DLL в Visual C++

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Borys
Сообщения: 18
Зарегистрирован: 09 июл 2004, 17:25
Откуда: Киев

09 июл 2004, 17:44

У меня такая проблема.
Есть длл на Делфи. Необходимо динамически подключить ее к проге на вижуале. Проблема в том, что я не могу передать правильно параметры. До длл на Делфи они доходят неправильно (я писал длл на С++ там все нормально). По видимому прблема в 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);
}

Вообще я пытаюсь вставить диалог на Делфи (длл) в прогу на вижуале. Получается довольно скверно. Постоянно приходиться обходить всякие пакости. Может кто-то подобное делал и может подсказать решение.
Eugie
Сообщения: 707
Зарегистрирован: 17 фев 2004, 23:59
Откуда: SPb

09 июл 2004, 18:37

А вот топики дублировать не надо
Borys
Сообщения: 18
Зарегистрирован: 09 июл 2004, 17:25
Откуда: Киев

10 июл 2004, 15:25

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

10 июл 2004, 15:29

Пошел на эту низость только ввиду того, что программисты С++ не очень любят форумы по Делфи и наоборот :-). Хотя вопрос касается и первых и вторых.
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

14 июл 2004, 01:26

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