1

Delphi 2009 の新しい VCL プロジェクト:

procedure TForm1.FormCreate(Sender: TObject);
var
    Handle: THandle;
begin
    Handle := loadlibrary('oci.dll');
    if Handle <> 0 then
    begin
        try
            ShowMessage('Success');
        finally
            FreeLibrary(Handle);
        end;
    end
    else
        ShowMessage('Fail');
end;

IDEからExeを実行すると失敗し、ディレクトリからEXEを実行すると、ダブルクリックするだけで成功します!!??

私が欠けているものを教えてください。

ありがとう、フレッド

編集: IDE 経由で EXE を起動すると、Delphi 7 で動作します!! WTfはD2009の問題です??

4

3 に答える 3

4

LoadLibrary が失敗する通常の問題は、必要な DLL がDLL 検索パスにないことです。 D2009 が何らかの理由で同じフォルダーを検索していない可能性があります。

確認するには、次のようなものを使用して、エラーの詳細を取得する必要があります...

ShowMessage(SysErrorMessage(GetLastError));

プロジェクトの .EXE と同じディレクトリに "oci.dll" を (一時的にでも) 配置して、もう一度やり直してください。

確認すべき点は次のとおりです。

  • oci.dll はどのディレクトリにありますか?
  • そのディレクトリは「PATH」環境変数に含まれていますか? そうでない場合は、それを試してください。
  • Delphi Tools/Options/Env 変数画面で PATH の OVERRIDE を設定したことがありますか?
于 2009-01-12T09:50:55.853 に答える
2

依存するDLLが同じディレクトリにある場合...起動ディレクトリがそれであることを確認してください。

これは、Visual Studioでも常に発生します...

于 2009-01-12T09:47:48.167 に答える
0

DLL がたまたま現在のディレクトリにあるため、スタンドアロンの呼び出しが機能すると思われます。

また、IDE から起動した場合、現在のディレクトリは EXE ディレクトリとは異なります。

DLL へのフル パス (つまり、ParamStr(0) からのパスと DLL 名のようなもの) を使用しようとしましたか?

于 2009-02-04T13:22:59.803 に答える