VC6升到VS2010遇到的问题

快乐鹦鹉 2013-12-23 05:31:43
最近尝试将工程从VC6升到VS2010时遇到一个问题。我的工程有主程序以及多个动态库。动态库是基于MFC的,部分函数返回值是CString类型。现在代码编译通过,但链接时,这些返回值是CString类型的动态库函数调用全部报告链接错误。无法解析的外部符号 "class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char>>> __stdcall GetModulePath(void)"
请问这个问题如何解决?
我已将字符集设置为“多字节字符集”,ATL的使用也停止了。还应该怎么处理呢?查找到微软的一个帖子http://support.microsoft.com/kb/309801/zh-cn。但没有什么作用。
有谁知道,告知一下......
...全文
273 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐鹦鹉 2013-12-24
  • 打赏
  • 举报
回复
原来的程序是VC6的,已经用了很多年了。动态库是MFC扩展动态库,导出的是类,也有的库导出的是函数。部分函数的返回值用的是CString。 我将主程序用VS2012自动升级,环境设置什么的也没有动。将一些VC6和VS2012不同的代码(比如循环变量定义的位置)进行调整后,代码编译通过了,但出现了LNK2019,LNK2001的链接错误。错误都指向我动态库中这些返回值为CString的函数,其它函数没有报链接错误。 所有动态库都不是静态链接的。 错误的内容都是类似于:无法解析的外部符号 "class ATL::CStringT<char,class StrTraitMFC_DLL<char,class ATL::ChTraitsCRT<char>>> __stdcall GetModulePath(void)" 比如这个动态库函数原型是 CString GetModulePath();获得应用程序的路径
快乐鹦鹉 2013-12-24
  • 打赏
  • 举报
回复
没招,只能将动态库在2012下重新编译......
康斯坦汀 2013-12-24
  • 打赏
  • 举报
回复
CString是模板类了,模板类导出导入貌似现在只有个别C++编译器可以支持。 所以,在DLL中不要用CString传递参数,就算没这个问题也不是好方案。 DLL这种接口类组件,一定要采用最基本最通用底层的类型。这样才能保证更多 的调用者没问题。
dvlinker 2013-12-23
  • 打赏
  • 举报
回复
我们之前也经历过这样的转换,但没遇到你这样的问题
沈-军涛 2013-12-23
  • 打赏
  • 举报
回复
版主大人好 2L版主大人也好 这个问题我来说说吧 我也曾有过类似的问题 但版主大人的信息太少了 我给几种可能和相应的解决方式 您可以自己试一下 1. wchar_t是否当做内置类型(原因不知道,但如果改了有可能能行如果有人知道原因还望告知) VS的更改在“工程属性”->“C/C++”->“语言”中 2. 对MFC的DLL是静态还是动态链接 更改就可能行了,这个我知道原因 3. 字符集问题 你说已都改为多字符集应该不是这方面原因但是仔细看看总是好的 4. ATL问题 我们都知道新版的CString实际上是一个模板类,但这个问题应该没问题才对。 5. 就是可能比较小的调用约定问题 还有一个事您没说清楚你说的链接有问题是你的DLL本身链接有问题 还是你的DLL本身没问题在和EXE一起编译的时候有问题 如果是DLL和EXE一起你看看这个事: 用eXeScope看看你的导出的函数中 有没有StrTraitMFC有是MFC静态链接 有没有StrTraitMFC_DLL有是动态链接 看看和EXE或错误信息里对比一下就知道了 全手打 希望能帮到你!
邓学彬 2013-12-23
  • 打赏
  • 举报
回复
动态库是指DLL?在DLL中返回CString还真没尝试过. 不懂,纯粹帮顶.
策略为王是一个很老的股票交易软件,包括行情接收、显示、技术指标、策略模拟等。功能很全,该有的都有,在当时也算是专业软件。 不知何故后来人家不再使用,也不再维护,就把源码放出来共享,一群好人啊!这是目前通过正常途径能够找到的最好的开源交易软件,也是最好的C++示例系统之一。无论您是有意从事股票/期货的自动交易,还是学习C++编程,读它的源码都是一个很好的开端,我就是这么做的。 策略为王最早的开发环境是VC6。我当时下的代码,最多升级到VS2003。据说能升到VS2005,我没试,但再往上肯定不行了。因为程序所用第三方控件库不支持更高版本的VS,这也是VS讨厌的地方。 后来我用QT编写自己的行情软件,就不再关注策略为王了。 最近兴趣重燃,发现网上有人家升级到VS2008的版本。原来的第三方控件库基本不再使用,功能及界面效果也大打折扣。未使用新的界面库,可以说程序变成了半成品,但这样也好,剩下的都是干货,更有利于研究和学习。无论如何,人家能升级到VS2008我还是很佩服的,做这个事的人应该是下了不少功夫,在此要表示感谢。 基于以前的积累,我对这些程序比较熟悉。在人家的基础上,我又做了点儿工作:把开发环境升级到了VS2015,改了几个错误,加了点儿小功能,加上了示例数据(让人一运行就能看到股票列表、技术图表和板块)。 传上来,谈不上共享精神,骗点儿积分。莫办法,有积分才能继续下载其它资源。 程序我在VS2015上已编译通过,这两天也一直在上面运行、修改。但不保证您的开发环境也能顺利通过,也许需要一些配置上的修改。如果您在编译过程中遇到问题,并不是我有意骗您,别生气,您可能需要点耐心,我要的1分也不多。 如果您使用其它的VS版本作为开发环境,可以去下载相应的版本,不用下载这个。据我所知,就CSDN上,从VC6VS2010所有版本都有。 最后,祝您开发、学习有个好心情。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧