0

我的应用程序使用 Bass.dll 并将其添加到资源中。我希望在应用程序启动它之前将其提取出来。如何作废呢?

4

3 回答 3

5

XBasic3000,我认为您的问题可能是您正在使用这样的外部声明

function Foo: integer; stdcall; external 'bass.dll';

所以操作系统无法解析dll中函数的地址。

相反,您必须在提取 DLL 后使用 LoadLibrary()GetProcAddress()函数,这样您可以通过检查 DLL 的存在来避免崩溃。

于 2010-08-11T05:26:51.360 回答
5

我认为您的问题的解决方案由RPUZChris Thornton描述(均赞成)。如果将文件提取到硬盘驱动器给您带来麻烦,您应该知道可以直接从内存中加载 DLL。

Zarko Gajic 在delphi.about.com上进行了解释。

于 2010-08-12T13:46:55.727 回答
3

如果你提取DLL,你把它放在哪里?您的应用程序不是具有特殊权限的设置应用程序 (setup.exe),因此在 Vista/Windows7 下它无法写入 \windows\system32 甚至 \program files\yourapp。尝试将其放入程序目录将导致它通过 VirtualStore 位于其他位置。因此,您必须在尝试 LoadLibrary() 之前验证 FileExists('bass.dll')。

于 2010-08-11T12:41:49.593 回答