我使用C ++ / CLI编写了一个DLL,它在我的Windows 7 x64 PC上运行良好。它唯一的依赖是VC ++(msvcr120,msvcr120_clr0400和msvcp120)以及OpenCV的一些模块(opencv_core2410,opencv_high2410,opencv_imgproc2410)。
我已经尝试在Windows Server 2008 R2上运行使用此DLL的代码。此服务器安装了两个版本(x86 / x64)的MSVC ++ 2013 Redist,并且我验证了DLL存在于C:\ Windows \ System文件夹中。
我已经通过IIS服务和Windows窗体对它进行了测试,在这两种情况下都无法找到MSVCP120.dll。我检查了使用Process Monitor,它在C:\ Windows \ SysWoW64,C:\ Windows \ system,C:\ Windows和许多其他文件夹中查找此文件,但不在C:\ Windows \ System32上查找。
因此,我将System32文件夹中的MSVC * 120文件复制到可执行文件夹中,并正常执行。那么,我该如何解决这个问题呢?复制DLL更容易,但我认为这不是最好的做法,我应该做些什么来确保它在正确的文件夹中查找DLL?
答案 0 :(得分:0)
使用静态链接到VS运行时,而不是使用动态链接到运行时DLL。
为此,您可以将DLL项目的RunTime-Library设置为多线程:
在IDE中通过C / C ++下的项目设置>代码生成>运行时库>多线程(/ MT)或(/ MTd)。
然后编译项目并在任何地方使用你的dll而没有任何问题!。
注意:您应该在发布模式下编译项目。