私のアプリケーションはBass.dllを使用しており、それをリソースに追加しました。アプリケーションがクラッシュを開始する前に抽出したかったのです。それを無効にする方法は?
3 に答える
XBasic3000、あなたの問題はおそらくあなたがこのような外部宣言を使用していることだと思います
function Foo: integer; stdcall; external 'bass.dll';
そのため、OSはdll内の関数のアドレスを解決できません。
代わりに 、DLLを抽出した後にLoadLibrary()およびGetProcAddress()関数を使用する必要があります。このようにして、DLLの存在を確認することでクラッシュを回避できます。
あなたの問題の解決策は、RPUZまたはChris Thornton(どちらも賛成)によって説明されていると思います。ハードドライブにファイルを抽出すると問題が発生する場合は、代わりにメモリから直接DLLをロードできることを知っておく必要があります。
ZarkoGajicはdelphi.about.comで説明しています。
DLLを抽出する場合、どこに配置しますか?アプリは特別な特権を持つセットアップアプリ(setup.exe)ではないため、Vista/Windows7では\windows\system32または\programfiles\yourappに書き込むことはできません。プログラムディレクトリに配置しようとすると、VirtualStoreを介して別の場所に配置されます。したがって、LoadLibrary()を試行する前に、FileExists('bass.dll')を確認する必要があります。