我在获取Inno-Setup来加载DLL时遇到问题。我看过类似的文章,但是这些文章中提供的解决方案似乎都没有帮助。特别是,这篇文章非常接近,但似乎不是一个完全相同的问题。
我的安装程序在我的测试系统上运行正常。我的DLL是使用VS 2010用C ++编写的。有一个DEF文件。我已经成功使用VS调试器将其附加到安装程序的线程并逐步执行了我的代码。万事皆安。发行版在我的测试系统上运行良好,并且没有调试器。安装程序将调用我的DLL,并且可以正常工作。
然后,我将安装程序带到另一个原始系统中进行尝试。每次启动安装程序时,它都会以通常的UAC提示符启动:“是否要允许未知发行商的以下程序对此计算机进行更改?” 我说“是”。然后,我会听到一声提示音和警报:
Runtime Error (at -1:0):
Cannot import
dll:<utf8>C:\Users\Logicrat\AppData\Local\Temp\is-4E245\MyDLL.dll
在我的安装脚本中
[Files]
Source: "MyDLL.dll"; DestDir: "{app}"; Flags : dontcopy
和
function MyFunc(hWnd: Integer; lpText, lpCaption: AnsiString; uType: Cardinal): Integer;
external 'MyFunc@files:MyDLL.dll stdcall setuponly';
根据Inno文档,dontcopy
如果卸载不需要DLL ,则该标志是适当的,否则不需要。
我怀疑问题出在确切地指定DLL应该位于的位置,正如我的脚本要求将其放在{app}
目录中一样,但是错误消息指向的是临时目录。我尝试了脚本的多种变体,所有变体都具有相同的结果。
我的开发/测试系统和原始目标系统都是Windows 7(32位)。数周来我一直在敲打它,没有明显的进步。任何建议都将受到欢迎。
由于TLama关于检查依赖项的建议,问题得以解决。当我最初在MS Visual Studio 2010中为DLL创建新项目时,我选择了“在共享库中使用MFC”选项。事实证明,这是问题的根源,因为DLL本身依赖于mfc100u.dll
和msvcr100.dll
,而我用来测试安装程序的目标系统上不存在。我通过将项目首选项更改为“在静态库中使用MFC”来解决此问题。这使DLL变大,但也使它起作用。然后,在我首先重建DLL之后再重建使用它的安装程序之后,一切都很好。
如果我第一次遇到的错误消息将其命名为正在寻找的DLL,而不是试图调用丢失的DLL的DLL,则可能会很好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句