3
我想尋求一些幫助。 我知道,有很多地方,我可以在這裏獲得這些信息。但是,無論如何,我有一個連接Delphi DLL到我的C++ Builder項目的問題。連接並在C++ Builder中使用Delphi DLL
例如,我的德爾福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);
大衛,謝謝你的回答。我再次檢查:是的,錯誤是我已經把dll錯誤的文件夾。現在一切正常。我已經檢查過一些東西 - 你可以將TForm傳遞給一個dll以及所有其他的VCL組件。 – an40us
@user不,你不能通過這樣的'TForm'。像閱讀句柄屬性一樣簡單就可以工作。事實上,相當多的工作可能會發生。但很多都會失敗。 –
好的,謝謝你,你幫了我很多:) – an40us