自作した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.
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;
参考になるかな?
http://leed.issp.u-tokyo.ac.jp/~takeuchi/delphi/browse.cgi?index=077472
DLLを使用するのをやめようかと検討していたところです。
(EXEに全て盛り込みます)
後押しになりました。
ありがとうございました。
ツイート | ![]() |