私はいくつかの助けを求めていました。 私はこの情報を得ることができる場所がたくさんあることを知っています。しかし、とにかく、私はC++ BuilderプロジェクトにDelphi DLLを接続する際に問題があります。例えば、C++ BuilderでDelphi DLLを接続して使用する
を私の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が接続されていないと言ってください。私は、Debugフォルダのプロジェクトフォルダに自分のdllを置いています。しかし、ただの接続はありません。
私はあなたのお手伝いをお願いします。私の間違いは何ですか? 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"); //HW instead _HW
if (!HLLWRLD) ShowMessage("Unable to find the function"); //HLLWRLD instead pShowSum
HLLWRLD(Form1);
FreeLibrary(hDLL);
David、答えに感謝します。私はもう一度チェックした:はい、間違いは、私は間違ったフォルダにDLLを置いたことだった。すべてが今働きます。そして、私は何かをチェックしました - あなたはTFormをdllと他のすべてのVCLコンポーネントに渡すことができます。 – an40us
@userいいえ、そのような 'TForm'を渡すことはできません。 handleプロパティを読み込むだけの簡単なことが動作します。実際にはかなりうまくいくかもしれません。しかし、ロットは失敗します。 –
大丈夫、ありがとう、あなたは私の多くの助け:) – an40us