
Delphi XE5 Starterを使っています。
http://delphi.arcadiangarden.com/delphilounge/we …
を参考に(というかそのまま)次のようにしたのですが、コンパイルすると「未定義の識別子TModalResult」と出ます。どこか間違っていますか?
//------------------------------------------------
library TestDll;
uses
Forms,
Windows,
DllMain in 'DllMain.pas' {DllForm};
function ShowTestForm(hOwner:HWND):TModalResult;stdcall;
begin
Application.Handle := hOwner;
DllForm := TDllForm.Create(Application);
result := DllForm.ShowModal;
DllForm.Free;
Application.Handle := 0;
end;
exports
ShowTestForm;
begin
end.
//--------------------------------
unit DllMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TDllForm = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
DllForm: TDllForm;
implementation
{$R *.DFM}
procedure TDllForm.Button1Click(Sender: TObject);
begin
ModalResult := mrOK;
end;
end.
No.1ベストアンサー
- 回答日時:
なんせそのサイトは2001年のときのものですからねえ。
たぶんTModalResultを定義している場所が変わったか、定義自体がなくなったかのどちらかでしょう。
ShowTestFormの返り値は、ShowModalの返り値と同じとしていますから、
TModalResultをIntegerに替えても大丈夫です。
No.2
- 回答日時:
>ただ、DLLのフォームのボタンを押しても何も応答がありません(DLLのフォームも消えません)。
古いバージョンのDelphiですが、作成して実行してみたら問題なく動いています。
XE5でも問題ないはずなんですが。
ひとつひとつ検証していくしかないでしょうね。
1.Dllフォームの右上の閉じるボタンは有効か?
2.ボタンイベントは有効か?
確認方法は、例えば、
ModalResult := mrOK;
の前に、フォームのCaptionに何か表示してみるとか。
プログラマにとって大切なのは、バグのないプログラムを作ることはもちろんですが、バグが発生したとき、いかに早く対処できるかも重要です。
がんばってください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Googleフォーム・複数人の申し...
-
PDFフォームに本日の日付を自動...
-
VBA リストボックスをダブルク...
-
Accessでフォームから別フォー...
-
サブフォームの新規レコードに...
-
VBAにてメッセージボックスを最...
-
C# 別なフォームへ値を渡す (...
-
タブコントロールを含んだフォ...
-
VB.net(VB)で、フォームにExcel...
-
1つのクエリを複数のフォーム...
-
メインフォームからサブフォー...
-
データシートビューからフォー...
-
[C#]別フォームとの連動について
-
毎日新聞「女の気持ち」匿名希...
-
ディスプレイ解像度より大きな...
-
ToolStripStatusLabelを固定し...
-
ACCESSのサブフォームのフォン...
-
csvに保存しているデータをURL...
-
AccessVBAのサブフォームの先頭行
-
EXCELのデータフォームのサイズ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Googleフォーム・複数人の申し...
-
VBA リストボックスをダブルク...
-
Accessでフォームから別フォー...
-
アクセスVBA フォームのス...
-
サブフォームのイベント取得
-
VBAにてメッセージボックスを最...
-
サブフォームの行ごとにコンボ...
-
ExcelVBAでユーザーフォーム内...
-
サブフォームの新規レコードに...
-
フォーム上の全てのコントロー...
-
Accessのトグルボタンでサブフ...
-
accessで2つ以上のフォームを起...
-
ユーザーフォーム上にアイコン...
-
ExcelVBAでフォーム内でブック...
-
PDFフォームに本日の日付を自動...
-
リストボックスの選択解除
-
VBAでフォームのスクロールバー...
-
dbOpenTableとdbOpenDynaset
-
Access サブフォームでの複数行...
-
フォームで複数のチェックボッ...
おすすめ情報
回答ありがとうございます。おかげさまでコンパイルはできました。
でも、テスト用のメインプログラムを作って実行させようとしたところ、
「...例外により実行を停止しました。...」と表示されます。
それにメインプログラムのコンパイルでもビルドでも、いつもはできるはずのexeファイルが作成されません。(作成したDLLは実行ファイルと同じディレクトリに置こうと思ったのですが、仕方なくUnit1.pasと同じディレクトリに置いています)
なぜなんでしょうか?
メインプログラムは次の補足の通りです。
//----------------
unit Unit1;
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;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
//---次の補足に続きます
var
Form1: TForm1;
implementation
{$R *.dfm}
function ShowTestForm(hOwner:HWND):Integer;stdcall;external 'TestDll.dll';
procedure TForm1.Button1Click(Sender: TObject);
begin
if ShowTestForm(Application.Handle) = mrOK then begin
MessageBeep($FFFFFFFF);
end;
end;
end.
動的インポートをすれば、エラーは出ず、DLLのフォームも表示され、exeファイルもいつの間にかできていました。
ただ、DLLのフォームのボタンを押しても何も応答がありません(DLLのフォームも消えません)。