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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- JavaScript clear機能を失わずにファイルアップロード機能を作成したい 3 2023/06/10 16:12
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- Visual Basic(VBA) Visual Basic : ImageListの画像がそろったときにメッセージを表示 1 2023/07/20 13:53
- Visual Basic(VBA) エクセルで、1つのセルで上書き足し算して セルの範囲を指定できますか? パソコン初心者です。 お時間 3 2023/07/05 06:13
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- PHP php テーブルが作成できない 1 2022/11/17 23:41
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
サブフォームのイベント取得
-
csvに保存しているデータをURL...
-
VBAにてメッセージボックスを最...
-
フォーム上の全てのコントロー...
-
VBA リストボックスをダブルク...
-
サブフォームの新規レコードに...
-
VB.NET 親フォームから子フォー...
-
Access 無操作の場合、自動で閉...
-
サブフォームにフィルタをかけたい
-
PDFフォーム内で日付計算したい...
-
Googleフォーム・複数人の申し...
-
DelphiでDLLを作成しているので...
-
短距離走...
-
メッセージボックスの背景色
-
ACCESS 2003の条件分岐について...
-
PDFフォームに本日の日付を自動...
-
accessで2つ以上のフォームを起...
-
ACCESS VBAサブフォーム(DATA S...
-
VBAでCOPYを繰り返すと、処理が...
-
「ご処理進めて頂きますようお...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAにてメッセージボックスを最...
-
リストボックスの選択解除
-
Googleフォーム・複数人の申し...
-
サブフォームの新規レコードに...
-
Accessでフォームから別フォー...
-
メッセージボックスの背景色
-
PDFフォームに本日の日付を自動...
-
accessで2つ以上のフォームを起...
-
VB.net(VB)で、フォームにExcel...
-
筋トレ初心者です。 ジムでひた...
-
Access 無操作の場合、自動で閉...
-
サブフォームのイベント取得
-
サブフォームの行ごとにコンボ...
-
VBプログラムの終了
-
ユーザーフォーム上にアイコン...
-
アクセスVBA フォームのス...
-
ディスプレイ解像度より大きな...
-
PDFフォーム内で日付計算したい...
-
フォーム上の全てのコントロー...
-
VBAでフォームのスクロールバー...
おすすめ情報
回答ありがとうございます。おかげさまでコンパイルはできました。
でも、テスト用のメインプログラムを作って実行させようとしたところ、
「...例外により実行を停止しました。...」と表示されます。
それにメインプログラムのコンパイルでもビルドでも、いつもはできるはずの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のフォームも消えません)。