以下のようなプログラムを作ったのですが、
実行すると、2回目が実行されません。
どうしてでしょうか?
≡≡ EXE側 ≡≡
type
TTestStart = function : TModalResult; stdcall;
var
RetCode: TModalResult;
Handle: THandle;
TestStart: TTestStart;
begin
// 起動時にファイルのバージョンアップを確認する
while True do begin
RetCode := mrNo;
// DLLを呼び出して実行する
Handle := LoadLibrary('Test.dll');
if Handle <> 0 then begin
@TestStart := GetProcAddress(Handle, 'TestStart');
if @TestStart <> Nil then begin
RetCode := TestStart;
FreeLibrary(Handle);
end;
end;
if RetCode = mrYes then Continue;
break;
end;
≡≡ DLL側 ≡≡
function TestStart: TModalResult; stdcall; export
begin
Form1 := TForm1.Create(Nil);
Result := Form1.ShowModal;
Form1.Free;
end;
exports
TestStart;
begin
end.
> Handle := LoadLibrary('Test.dll');
これを
Handle := LoadLibrary(ExtractFilePath(ParamStr(0))'+'Test.dll');
にしてみるとか
ようするに dll があるところまでのフルパスをつかう、ということです。
編集 削除りおりおさん、
どうも、ありがとうございます。
どうやら、DLL側でエラーが出ているようです。
Form1 := TForm1.Create(Nil);
が実行できないみたいなのですが
お手数をおかけします。
私の環境では上のソースで動きましたよ。
# Delphi7Pro/Windows XP Pro+SP2
TForm1.Createでエラーになるのなら、EXE側のApplicationをDLL側に代入してみてはどうでしょう。
TestStart:...を、TestStart(App: TApplication):...に変更して、
begin
Application := App;
としてみるとか。