2013-08-05 75 views
1

我试图在Windows XP(SP3)上执行一个C#程序,该程序引用了使用VS2012编译的托管C++ DLL。在编译C++ DLL时,我已经将平台工具集设置为构建到Windows XP(使用v110_xp选项),并在链接器选项中将最低需求版本设置为5.01,并且我已经在Windows XP机器上安装了Visual C++ 2012 Redistributable Package。但它没有奏效。使用C++ DLL从Visual Studio 2012运行Windows XP的目标

对此有何想法?

+0

什么意思是“没有工作”?你有没有安装“VS2012 Update 3”?您应该已经安装了http://www.microsoft.com/en-us/download/details.aspx?id=30679,并且只对发行版本进行了解码。 –

+0

是的,我已经在我的开发机器上安装了“VS2012 Update 3”,并在Windows XP上安装了“Visual C++ 2012 Update 3的Visual C++ Redistributable” –

+0

在我的DLL中,只有一个简单的函数,打印一条消息。当在我的开发机器(Windows 8)上运行时,它会打印该消息。但在我的Windows XP上,它什么都不做。 –

回答

0

正如你所提到的平台工具集和v110_xp选项,我会冒险假设问题是关于一个非托管 C + + DLL。无论如何,尝试使用原始VS 2012发行版(不更新)编译您的DLL并查看它是否有效。我处理了由VS 2012 Update 2引起的类似问题,其描述为here。你可以使用DependencyWalker来测试你的每个依赖DLL(包括VC++ redistributable),以检查它们中的任何一个是否使用未被Windows XP实现的Win32 API。只需在XP下进行即可。

+0

感谢您的回复。我使用Dependency Walker在Windows XP上检查我的C++ DLL,然后在KERNEL32.DLL中找到许多Win32 API,例如“FlsAlloc”,“FlsFree”等,但未实现。我做什么? –

+0

尝试动态链接到[VC++运行时库(CRT)](http://msdn.microsoft.com/en-us/library/abx4dbyh(v = vs.110).aspx),看看是否有帮助。在我的情况下,我设法摆脱了所有的CRT依赖,并使用纯粹的Win32 API,但那是一个非常小的DLL。另一个不太好的选择是在没有任何更新的情况下回滚到原始VS 2012版本(或者为了编译DLL而将它安装在虚拟机下)。 – Noseratio

+0

我已将运行时库设置为“/ MDd”,并将公共语言运行时库设置为“/ clr”。这是对的吗? –

相关问题