1

Delphi プロジェクトにライブラリをロードしようとしていますが、このライブラリは 2 つの場所にある可能性があります。それをロードするために、次のコードを使用しています。

  try
    FHandle:=LoadLibrary(('some\address'));
  except on EAccessViolation do
    FHandle:=LoadLibrary(('another\address'));
  end;

ただし、例外に到達しないため問題が発生しています。アクセス違反があったというエラーが発生しましたが、他のアドレスからロードしようとはしていません...

誰かが理由を知っていますか?

ありがとう、

4

2 に答える 2

4

LoadLibrary例外を発生させません。Win32関数です。ドキュメントを参照すると、失敗した場合に返されることがわかりますNULL

コードは次のようになります。

FHandle := LoadLibrary('some\address');
if FHandle = 0 then
  FHandle := LoadLibrary('another\address');
if FHandle = 0 then
  // handle the error, probably by raising an exception

別のオプションFileExistsは、ファイルが含まれている可能性のある場所を確認するために使用することです。

于 2013-09-11T13:38:33.870 に答える
1

Davidの回答に追加するには、関数が返される、nullつまり失敗した場合、でエラーを取得できます。次GetLastError()を参照してください。

http://msdn.microsoft.com/en-us/library/ms679360.aspx

エラー コードのリストは次の場所にあります。

http://msdn.microsoft.com/en-us/library/ms679360.aspx

GetLastError の結果を使用して、意味のある例外の種類と説明を使用して自分自身を発生させて例外を発生させることができます。

于 2013-09-12T11:36:43.217 に答える