画面つきのDLLを作るには?

解決


へるぷ  2006-12-07 13:37:09  No: 24168  IP: 192.*.*.*

画面つきのDLLを作るにはどうすればいいのでしょうか?
作ったDLLをEXEから呼び出したいのですが…。
DLLで作った関数をEXEで呼び出す方法は分かるのですが、やり方としては同じなのでしょうか?
よろしくお願いします。

編集 削除
うんと  2006-12-07 16:50:41  No: 24169  IP: 192.*.*.*

dllでフォームを持つことは出来ないのでしょうか?

http://delphi.arcadiangarden.com/delphilounge/webconv.dll/alltree?No=13391

が参考になるでしょう。

編集 削除
へるぷ  2006-12-08 09:49:41  No: 24170  IP: 192.*.*.*

ありがとうございます。
そちらの記事を参考に実行することが出来ました。
またレスを頂く前に組んだコードでも同様に実行することが出来たのですが、こちらは間違いということなのでしょうか?
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を起動。

編集 削除
うんと  2006-12-08 10:31:24  No: 24171  IP: 192.*.*.*

そのソースでは、DLL を使ってませんね。

編集 削除
へるぷ  2006-12-08 11:16:11  No: 24172  IP: 192.*.*.*

やはりそうですか…。ありがとうございます。

教えていただいた記事のソースをうまく読み込めていないので申し訳ないのですが、あちらの記事ではfunction ShowTestFormを使ってDLLフォームを呼び出していますが、あれはDLLフォームのボタンを押したときの戻り値を使っているからと考えていいのでしょうか?
使い道のないフォームだとは思いますが、ボタンなどを貼り付けていない新規の状態のDLLフォームをただ呼び出したい場合は、procedureでform.createとshow(modal)をコーディングすればいいのでしょうか?
delphiを勉強し始めてまだ間もないため、初歩的な質問になってしまい申し訳ありませんが、EXEでの呼び出しコードのアドバイスを頂ければ助かります。

編集 削除
へるぷ  2006-12-08 11:26:09  No: 24173  IP: 192.*.*.*

試したコードを載せておきます。
これだと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;

編集 削除
へるぷ  2006-12-08 11:53:45  No: 24174  IP: 192.*.*.*

先ほどさせていただいた質問ですが、以下のコードで実行することが出来ました。
また何かミスがあればご指摘いただければと思います。
うんとさんお付き合い下さりありがとうございました。

---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;

編集 削除
へるぷ  2006-12-08 12:06:59  No: 24175  IP: 192.*.*.*

functionではなくprocedureでした。
何度もすみません。

編集 削除