使用Inno-Setup自定义DLL

时间:2014-07-29 19:04:56

标签: c++ dll inno-setup

我无法让Inno-Setup加载我的DLL。 我看过类似的帖子,但是那些提供的解决方案似乎都没有帮助。特别是,this帖子非常接近,但似乎不是完全相同的问题。

我的安装程序在我的测试系统上运行得很好。我的DLL是用C ++编写的,使用VS 2010.有一个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文档,如果卸载不需要DLL,则dontcopy标志是合适的,而不是。

我怀疑问题在于指定DLL应该在哪里,因为我的脚本要求它在{app}目录中,但错误消息指的是临时目录。我尝试了很多脚本的变体,都有相同的结果。

我的开发/测试系统和我的原始目标系统都是Windows 7(32位)。几周以来我一直在敲打这一点而没有明显进展。任何建议都将受到欢迎。

1 个答案:

答案 0 :(得分:2)

问题已经解决,感谢TLama关于检查依赖关系的建议。当我最初在MS Visual Studio 2010中为我的DLL创建新项目时,我选择了“在共享库中使用MFC”选项。事实证明这是问题的根源,因为DLL本身依赖于mfc100u.dllmsvcr100.dll,这些在我用于测试安装程序的目标系统上不存在。我通过将项目首选项更改为“在静态库中使用MFC”来修复它。这使得DLL更大,但它也使它工作。然后,在我第一次重建DLL然后重建使用它的安装程序后,一切都很好。

如果我第一次得到的错误消息命名为它正在查找的DLL而不是试图调用丢失的DLL的错误信息,那可能会很好。