我想请求一些帮助。 我知道,有很多地方,我可以获得这些信息。但是,无论如何,我在将Delphi DLL连接到我的C ++ Builder项目时遇到了问题。
例如,我的Delphi DLL看起来像:
library f_dll;
uses
SysUtils,
Classes,
Forms,
Windows;
procedure HW(AForm : TForm);
begin
MessageBox(AForm.Handle, 'DLL message', 'you made it!',MB_OK);
end;
exports
HW;
{$R *.res}
begin
end.
这就是我在内部连接DLL和函数的方式:
//defining a function pointer type
typedef void (*dll_func)(TForm* AForm);
dll_func HLLWRLD = NULL;
HMODULE hDLL = LoadLibrary("f_dll.dll");
if (!hDLL) ShowMessage("Unable to load the library!");
//getting adress of the function
HLLWRD = (dll_func)GetProcAddress(hDLL, "_HW");
if (!pShowSum) ShowMessage("Unable to find the function");
HLLWRLD(Form1);
FreeLibrary(hDLL);
我没有来自编译器的错误消息,我只有我的消息框说,dll没有连接。我把我的dll放在项目文件夹的Debug文件夹中。但是没有任何联系。
拜托,我请你帮帮我。我的错是什么?
编辑:我发布了错误的C ++代码,所以这是正确的(这适用于有类似问题的人)://defining a function pointer type
typedef void (*dll_func)(TForm* AForm);
dll_func HLLWRLD = NULL;
HMODULE hDLL = LoadLibrary("f_dll.dll");
if (!hDLL) ShowMessage("Unable to load the library!");
//getting adress of the function
HLLWRD = (dll_func)GetProcAddress(hDLL, "HW"); //HW instead _HW
if (!HLLWRLD) ShowMessage("Unable to find the function"); //HLLWRLD instead pShowSum
HLLWRLD(Form1);
FreeLibrary(hDLL);
答案 0 :(得分:3)
更严重的问题是你根本无法像这样在DLL边界上传递TForm。当您在DLL中的对象上调用方法时,您正在调用DLL中的代码而不是主机exe中的代码。但是这是exe中需要调用的代码,因为那是属于该对象的代码。
您需要切换到运行时包或接口。