EDIT:ダムの質問が既に修正されています。 Form1
はnil
だったので、私はそれに新しいTForm1
を割り当てなかったので、C++のようにDelphiがそれをしないのを忘れてしまった。フォームを表示しているときにC++から呼び出されたDelphi DLLがクラッシュする
私は自分のC++プログラムのGUIに使いたいDelphi DLLを持っているので、まずフォームを作成し、エクスポートされたフォームを表示してC++で呼び出せるようにする関数を持っています。ただし、関数を呼び出すと、プログラムがクラッシュします。ここに私のコードです。 "@それを見つけた"
HMODULE h = LoadLibrary("delphidll.dll");
if (!h) {
printf("Failed LoadLibrary (GetLastError: %i)\n", GetLastError());
return 0;
}
FARPROC p = GetProcAddress(h, "ShowForm");
if (p)
printf("Found it @ %p\n", p);
else
printf("Didn't find it\n");
((int(__cdecl *)(int))p)(34);
system("PAUSE");
return 0;
プログラムを印刷し、その後クラッシュ:
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Tabs, ComCtrls;
type
TForm1 = class(TForm)
TabControl1: TTabControl;
TabSet1: TTabSet;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
function ShowForm(i: Integer) : Integer; export; cdecl;
exports
ShowForm name 'ShowForm';
implementation
{$R *.dfm}
function ShowForm(i: Integer) : Integer; export; cdecl;
begin
Form1.Show();
Result := 3; // random value, doesn't mean anything
end;
end.
そしてここでC++のコードがある:デルファイの部分は
を(私は、Delphi 2010を使用しています)。 Delphi DLLでForm1.Show()
をコメントアウトすると、クラッシュせず、関数は3を返します(printfによってテストされます)。私はいくつかの初期化や何かを欠いていますか?ありがとう。
@David私にはわからない。 – Okey