Visual c++ 使用Visual C++;2008快速编译DLL 首先,我不是C++程序员(但我在学习)。我终于成功地使用Visual C++ 2008 Express版修改和编译了一些C++源代码。我尝试着在Visual C++ 2003的完整版本中编译相同的代码,但没有成功(我得到了各种各样的错误,但没有运气)。
问题是,在Windows Vista上使用RunDll32调用DLL时一切正常,但在Windows 2000上尝试相同的RunDll32调用时,出现以下错误: “加载mySampleDell.dll时出错” “找不到指定的模块。” 当然,我试过设置完整路径,移动文件等等…但是运气不好。我保证该文件存在并具有正确的权限 我想可能是Vista中与DLL一起编译的清单有问题。因此,我使用资源编辑器删除了它,但在Vista和Win2k中出现了相同的错误。这是舱单:Visual c++ 使用Visual C++;2008快速编译DLL 首先,我不是C++程序员(但我在学习)。我终于成功地使用Visual C++ 2008 Express版修改和编译了一些C++源代码。我尝试着在Visual C++ 2003的完整版本中编译相同的代码,但没有成功(我得到了各种各样的错误,但没有运气)。,visual-c++,dll,manifest,windows-server-2000,Visual C++,Dll,Manifest,Windows Server 2000,问题是,在Windows Vista上使用RunDll32调用DLL时一切正常,但在Windows 2000上尝试相同的RunDll32调用时,出现以下错误: “加载mySampleDell.dll时出错” “找不到指定的模块。” 当然,我试过设置完整路径,移动文件等等…但是运气不好。我保证该文件存在并具有正确的权限 我想可能是Vista中与DLL一起编译的清单有问题。因此,我使用资源编辑器删除了它,但在Vista和Win2k中出现了相同的错误。这是舱单: <assembly xmlns=
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"></requestedExecutionLevel>
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
</dependentAssembly>
</dependency>
</assembly>
现在,我假设问题在于Win2k没有安装Microsoft.VC90.CRT,但是为什么我的DLL有这种依赖关系?我在项目属性中将“公共语言运行时支持”设置为“无公共语言运行时支持”,那么为什么它仍然需要CLR呢?有没有办法改变清单以使用默认的Wi2K默认的C++运行时?很抱歉我对这些问题一无所知,并提前感谢您的帮助。尝试安装
包含程序需要的C++运行时DLL。
别弄糊涂了。这不是CLR。CLR用于托管代码,而不是本机英特尔可执行文件。如果将本机可执行文件动态链接到运行时,则即使是本机可执行文件也需要Microsoft运行时库dll。这是Project属性中的缺省值,C++、代码生成、运行库=多线程DLL。您可以通过选择多线程来避免这种情况,它会在库代码中静态链接。我想说,在Windows 2000框中,您的DLL不会加载,因为它缺少依赖项 您可以通过下载此处的dependens实用程序来查找缺少的内容:
如果是错误的MSCRT DLL,则需要将这些DLL与DLL一起重新分配。问题在于,您正试图运行一个使用链接到的调试C运行时(CRT)库编译的DLL 要解决此问题,请在非调试CRT中链接DLL: 选项1:构建和分发发布版本。(这是你应该做的,当它的时间释放。) 为此:
- 列表项
- 构建。配置管理器。。。并将您的目标风格从调试更改为发布;或
- 生成。批生成。。。调试和发布的检查;及
- 使用发布目录中的二进制文件
- 列表项
- 项目。属性
- 导航到C/C++,代码生成
- 对于运行库,选择多线程DLL或多线程
(顺便说一下,CLR!=CRT,但这是一个不同的讨论。)请注意,如果您不希望用户运行CRT安装程序,也可以随应用程序重新分发CRT DLL。您可以在redist\x86下的VC安装目录中找到它们(C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT是我机器上的完整路径)。请注意,您必须复制该目录中的所有四个文件(三个DLL和一个清单),并将它们放在EXE旁边才能正常工作
如果您正在做任何更复杂的事情,比如构建一个DLL供其他应用程序加载,这是不够的,但在大多数情况下,这就足够了。非常感谢您的帮助大家(thinkcube、jussij和Ants)。我不敢相信我把CRT和CLR搞混了,但在盯着代码看了几个小时后,我猜奇怪的事情可能会发生!