DLLとEXEとでクラスのインスタンスを共有したい

解決


佐々木  2009-08-19 01:30:44  No: 35443

自作したDLLをEXEで使用しています(共にDelphi2007)。

DLLのvar句でクラスを宣言し、DLL内で生成して使用していまが、
そのクラス内のpublicに宣言した変数をEXE側から参照しなくてはならなくなってしまいました。

変数の値を1つ1つリターンする関数をDLLに設けてもいいのですが、数が多くて困っています。

DLLとEXEとでクラスを共有する方法をご存知でしたらご教授ください。

よろしくお願いします。

-----------------------------------------------
[以下DLLのソースになります(一部)]

library  TestUtils;

(省略);

var
  myClass: TMyClass;            //<--このクラスをEXEから参照したい

procedure  Initialize;  stdcall;
begin
  myClass  :=  TMyClass.Create;
end;

procedure  Terminate;  stdcall;
begin
  myClass.Free;
end;

procedure  Func1;  stdcall;
begin
  //  myClassを使用して色々と処理
end;

//  その他の関数でもmyClassを使用

exports
  Initialize,
  Terminate,
  Func1;

begin
end.


佐々木  2009-08-20 01:10:46  No: 35444

EXE側でクラス(myClass)を宣言し、DLL側で生成したクラスのポインタをmyClassに受けて使用してみたのですが、エラーは起きませんでした。
こんな使い方をしてしまって大丈夫でしょうか?

アドバイスいただけるとありがたいです。

よろしくお願いします。

-----------------------------------------------
[以下DLLのソースになります(一部)]

var
  myClass:  TMyClass

function  Initialize: Pointer;  stdcall;
begin
  myClass  :=  TMyClass.Create;
  Result := myClass;
end;

-----------------------------------------------
[以下EXEのソースになります(一部)]

procedure  TForm1.Button1Click(Sender:  TObject);
var
  myClass:  TMyClass
begin
  (省略)
  
  myClass  :=  Initialize();
  
  //  以降、myClassを使用する(値の書き換え等)
end;


参考  2009-08-21 00:29:05  No: 35445

参考になるかな?

http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/browse.cgi?index=077472


佐々木  2009-08-21 00:45:45  No: 35446

DLLを使用するのをやめようかと検討していたところです。
(EXEに全て盛り込みます)

後押しになりました。

ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加