0

我已经在一个项目上工作了一年多一点。自从我开始这个项目以来,它首先是在 VS2008 中工作的。MFC 的使用设置为共享库。我得到了项目,由于我没有 VS2008,我将项目升级到 V100。当我将驱动程序发布给客户时,他们回复我说新库在他们安装 C++ 运行时 2010 之前无法工作。起初我很困惑,但后来发现这是因为 MFC 设置为共享。我告诉他们这是必需的,他们对此表示同意。我一直不明白这背后的原因,只是顺其自然。好快进几个月,VS2012 出来了,我跳上了那辆乐队的马车。它显示 C++ 代码(在我看来)要好得多。现在在某个时候,我正在使用设置并将字符集更改为 Unicode(从无)和静态库中的 MFC。这导致 DLL 的大小增加了一点,我认为这可以解决需要安装 VC100crt 的问题。所以当我升级的时候,我也把平台工具集升级到了V110。构建它并希望该人在我发布它之前在他们的系统上对其进行测试。他回击说它不会注册,并且他的程序无法识别它。所以我使用 V100 重新编译,它对他有用。他的程序无法识别它。所以我使用 V100 重新编译,它对他有用。他的程序无法识别它。所以我使用 V100 重新编译,它对他有用。

那么我错过了什么?为什么需要安装 V100crt 才能注册我的 dll。还加载了另一个类似的库(不确定编译选项是什么),但它似乎不需要安装任何 CRT ......想法?

编辑

C++ 编译选项

/Yu"StdAfx.h"
/GS
/analyze-
/W3
/Zc:wchar_t
/Zi
/Gm-
/Od
/Fd"Debug\vc100.pdb"
/fp:precise
/D "WIN32"
/D "_WINDOWS"
/D "_DEBUG"
/D "_USRDLL"
/D "_WINDLL"
/D "_UNICODE"
/D "UNICODE"
/errorReport:prompt
/WX-
/Zc:forScope
/Gd
/Oy-
/MTd
/Fa"Debug\"
/EHsc
/nologo
/Fo"Debug\"
/Fp"Debug\MyLibrary.pch" 

哇,这是一个很长的自动生成列表:/ ugh.. 这是链接器。希望我能更好地理解这些。

链接器选项

/OUT:"C:\Subversion\MyLibrary\Debug\MyLibrary.dll"
/MANIFEST
/NXCOMPAT
/PDB:"C:\Subversion\MyLibrary\Debug\MyLibrary.pdb"
/DYNAMICBASE
/ALLOWISOLATION
/DEF:".\MyLibrary.def"
/DEBUG
/DLL
/MACHINE:X86
/INCREMENTAL
/PGD:"C:\Subversion\MyLibrary\Debug\MyLibrary.pgd"
/SUBSYSTEM:WINDOWS
/MANIFESTUAC:"level='asInvoker'
uiAccess='false'"
/ManifestFile:"Debug\MyLibrary.dll.intermediate.manifest"
/ERRORREPORT:PROMPT
/NOLOGO
/TLBID:1 

配置选项 一般:

Target Extension: .dll
Platform Toolset: Visual Studio 2012 (v110)

项目默认值:

Configuration Type: Dynamic Library (.dll)
Use of MFC: Use MFC in a Static Library
Use of ATL: Not using ATL
Character Set: Use Unicode Character Set
Common Language Runtime Support: No Common Language Runtime Support
Whole Program Optimization: No Whole Program Optimization
Windows Store App Support: No

我还找到了不嵌入清单的地方。所以我把它改成了No。

4

0 回答 0