我的应用程序使用 Bass.dll 并将其添加到资源中。我希望在应用程序启动它之前将其提取出来。如何作废呢?
问问题
878 次
3 回答
5
XBasic3000,我认为您的问题可能是您正在使用这样的外部声明
function Foo: integer; stdcall; external 'bass.dll';
所以操作系统无法解析dll中函数的地址。
相反,您必须在提取 DLL 后使用 LoadLibrary()和GetProcAddress()函数,这样您可以通过检查 DLL 的存在来避免崩溃。
于 2010-08-11T05:26:51.360 回答
5
我认为您的问题的解决方案由RPUZ或Chris 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 回答