画面つきのDLLを作るにはどうすればいいのでしょうか?
作ったDLLをEXEから呼び出したいのですが…。
DLLで作った関数をEXEで呼び出す方法は分かるのですが、やり方としては同じなのでしょうか?
よろしくお願いします。
dllでフォームを持つことは出来ないのでしょうか?
http://delphi.arcadiangarden.com/delphilounge/webconv.dll/alltree?No=13391
が参考になるでしょう。
ありがとうございます。
そちらの記事を参考に実行することが出来ました。
またレスを頂く前に組んだコードでも同様に実行することが出来たのですが、こちらは間違いということなのでしょうか?
EXEのフォルダにDLLを入れなくても動いてしまったのでおそらく間違いだと思うのですが、ご指摘頂ければ幸いです。
---EXEのソース---
unit t002P;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls,t003P;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2 := TForm2.Create(Application);
Form2.Show;
end;
end.
------
DLL t001.dpr
DLLフォームユニット t003.pas
t001.dll、t003.pas、t003.dfmをEXEのフォルダに入れてEXEを起動。
そのソースでは、DLL を使ってませんね。
やはりそうですか…。ありがとうございます。
教えていただいた記事のソースをうまく読み込めていないので申し訳ないのですが、あちらの記事ではfunction ShowTestFormを使ってDLLフォームを呼び出していますが、あれはDLLフォームのボタンを押したときの戻り値を使っているからと考えていいのでしょうか?
使い道のないフォームだとは思いますが、ボタンなどを貼り付けていない新規の状態のDLLフォームをただ呼び出したい場合は、procedureでform.createとshow(modal)をコーディングすればいいのでしょうか?
delphiを勉強し始めてまだ間もないため、初歩的な質問になってしまい申し訳ありませんが、EXEでの呼び出しコードのアドバイスを頂ければ助かります。
試したコードを載せておきます。
これだとDLLフォームの呼び出し時にエラーが起きてしまいました.
procedureを使ったDLLを作成したことが無いのでコーディングの仕方が分からず…。
---DLL---
procedure ShowTestForm;stdcall;
begin
TForm1.Create(Application);
Form1.Show;
end;
---EXE---
procedure ShowTestForm;stdcall;external 'TestDll.dll';
・・・・・・・・
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowTestForm;
end;
先ほどさせていただいた質問ですが、以下のコードで実行することが出来ました。
また何かミスがあればご指摘いただければと思います。
うんとさんお付き合い下さりありがとうございました。
---DLL---
function ShowTestForm:TModalResult;stdcall;
begin
Form2 := TForm2.Create(Application);
Form2.Show;
end;
---EXE---
function ShowTestForm:TModalResult;stdcall;external 'TestDll.dll';
・・・・・・・・・
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowTestForm;
end;
functionではなくprocedureでした。
何度もすみません。
ツイート | ![]() |