BCB的DLL是一个MIDI子窗体
现在想通过Delphi调这个DLL,让这个子窗体显示出来。
BCB中的DLL接口如下写的extern "C" __declspec(dllexport) bool __stdcall OpenForm(HWND ahandle,
TForm form, TADOConnection aconDB)
{ if ( NULL == SaveApp ) // 保存 Application,传递 Application
{
SaveApp = Application;
ShowMessage("e");
Application = (TApplication*)hd;
ShowMessage("f");
}
if (NULL == MyForm)
{
MyForm = new TForm2(Application);
}
ShowMessage("A");
return true;
}Delphi中的调用是如下写的
dllHandle := LibHandle;
try
ProcAddr := GetProcAddress(LibHandle, 'OpenForm');
openForm := ProcAddr;
if Assigned(openForm) then
begin
openForm(Handle, form1, DBModule.conDB);
end;
except
FreeLibrary(libHandle);
end;现在我的程序走到Application = (TApplication*)hd;就报错
我想应当是我的Handle传的不对。但是我无论是用Self.Handle还是Application.Handle都报错。
难道强制转换不行吗?如果不行,有什么方法可以将BCB6写的DLL窗体调出来呢?
现在想通过Delphi调这个DLL,让这个子窗体显示出来。
BCB中的DLL接口如下写的extern "C" __declspec(dllexport) bool __stdcall OpenForm(HWND ahandle,
TForm form, TADOConnection aconDB)
{ if ( NULL == SaveApp ) // 保存 Application,传递 Application
{
SaveApp = Application;
ShowMessage("e");
Application = (TApplication*)hd;
ShowMessage("f");
}
if (NULL == MyForm)
{
MyForm = new TForm2(Application);
}
ShowMessage("A");
return true;
}Delphi中的调用是如下写的
dllHandle := LibHandle;
try
ProcAddr := GetProcAddress(LibHandle, 'OpenForm');
openForm := ProcAddr;
if Assigned(openForm) then
begin
openForm(Handle, form1, DBModule.conDB);
end;
except
FreeLibrary(libHandle);
end;现在我的程序走到Application = (TApplication*)hd;就报错
我想应当是我的Handle传的不对。但是我无论是用Self.Handle还是Application.Handle都报错。
难道强制转换不行吗?如果不行,有什么方法可以将BCB6写的DLL窗体调出来呢?
你应该传Application 本身,而不是handle