У меня такая проблема.
Есть длл на Делфи. Необходимо динамически подключить ее к проге на вижуале. Проблема в том, что я не могу передать правильно параметры. До длл на Делфи они доходят неправильно (я писал длл на С++ там все нормально). По видимому прблема в 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);
}
Вообще я пытаюсь вставить диалог на Делфи (длл) в прогу на вижуале. Получается довольно скверно. Постоянно приходиться обходить всякие пакости. Может кто-то подобное делал и может подсказать решение.
Delphi DLL в Visual C++
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
А вот топики дублировать не надо
Ошибка в следующем:
Я в вижуале вызываю функцию:
TShow((LPCSTR)str1, GetSafeHwnd(), (LPCSTR)str2);
Открывается окно делфийского приложения. Оно получает параметры не так как нужно. Например в вижуале str1--"7006", HWND -- число и str2--"Не выбран".
В делфи-диалоге пулучается:
str1="Um'j"
HWND--число, но не то которое было.
str2=7006"(=str1)
Если использовать stdcall(Delphi) и WINAPI(C++) то параметры вроде передаются правильно(по крайней мере строки), но приложение падает.
Я в вижуале вызываю функцию:
TShow((LPCSTR)str1, GetSafeHwnd(), (LPCSTR)str2);
Открывается окно делфийского приложения. Оно получает параметры не так как нужно. Например в вижуале str1--"7006", HWND -- число и str2--"Не выбран".
В делфи-диалоге пулучается:
str1="Um'j"
HWND--число, но не то которое было.
str2=7006"(=str1)
Если использовать stdcall(Delphi) и WINAPI(C++) то параметры вроде передаются правильно(по крайней мере строки), но приложение падает.
Пошел на эту низость только ввиду того, что программисты С++ не очень любят форумы по Делфи и наоборот :-). Хотя вопрос касается и первых и вторых.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Не вижу тут использования stdcall!Пытался использовать stdcall и WINAPI результатов не дало.
Вот часть на делфи:
function ShowForm(c: LPCSTR; h: HWND; d: LPCSTR):HWND;
begin
Кроме stdcall имеется еще и cdecl отличается как раз порядком передачи аргументов. В C и Pascal этот порядок противоположный.