DLLサンプルプログラムが動きません
Delphi XE5 starter で、
http://www39.atwiki.jp/kgh07155/pages/28.html
を参考にして以下のようなプログラムを作りました。
コンパイルはできたのですが、Button1をクリックすると「TDllFormリソースが見つかりません」というエラーメッセージが出ます。
どういう風に修正すればいいのでしょうか?
//*****************************
//SamoleUnit2.pasの内容
unit Unit_Sample2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function ShowDLLForm(hOwner: HWND): TModalResult; stdcall;
external 'DLLSample.dll';
procedure ShowDLLForm2;
external 'DLLSample.dll';
// ここまで、DLLを呼び出すための記述。
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowDLLForm(Application.Handle);
// DLL側でフォームを作成した後、
// 通常のフォームのShowModalメソッドと同じ動作をして
// 作成したフォームを破棄。
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ShowDLLForm2;
// DLL側でフォームを作成した後、
// 作成したフォームを表示。
end;
end.
//********************************
//DllSample.dprの内容
library DLLSample;
uses
System.SysUtils,
System.Classes,
Windows,
Forms,
Controls,
Unit_DLLForm in 'Unit_DLLForm.pas' {Form1},
Unit_Sample2 in 'Unit_Sample2.pas' {Form2};
type
TDllForm = class(TForm)
end;
{$R *.res}
function ShowDLLForm(hOwner: HWND): TModalResult; stdcall;
var
DllForm:TDllForm;
begin
Application.Handle := hOwner; // 呼び出し元の情報をDLL側が受け取る。
DllForm := TDllForm.Create(Application); // DLL側でフォームを作成する。
// フォームに配置された各オブジェクトも、自動で作成される。
Result := DllForm.ShowModal; // 返し値を設定。
DllForm.Free; // DLL側で作成したフォームを破棄。
Application.Handle := 0; // 呼び出し元の情報を破棄。
end;
procedure ShowDLLForm2;
var
DllForm:TDllForm;
begin
DllForm := TDllForm.Create(Application); // DLL側でフォームを作成する。
DllForm.Show; // 作成したフォームを表示。
end;
exports
ShowDLLForm,
ShowDLLForm2;
begin
end.
//********************************
//unit_DLLForm.pasの内容
unit Unit_DLLForm;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.
補足
御返事ありがとうございました。 Form2はそのまま表示しています。 しかしながら、色々と試してみたのですが、 Close()してdelete()したときと、 表示したままの時での違いはありませんでした。