【B2B研发商城】 【加入收藏】 【设为首页】 【进入论坛】 【站点地图】

你的位置:中国研发网 >> 技术文章 >> 软件设计 >> 详细内容 在线投稿

vc6程序移植到vs2005环境下编译错误问题

热度200票  浏览547次 【共0条评论】【我要评论 时间:2010年7月28日 13:24
我在vc6.0下调用vs2005的函数,出现连接错误
vs2005代码:
#pragma once
#ifdef TEST_EXPORTS
#define TEST_EXPORT  __declspec(dllexport)
#else
#define TEST_EXPORT __declspec(dllimport)
#endif

class  TEST_EXPORT myTest
{
public:
myTest(void);
void  displayMessage( CString str );
public:
~myTest(void);
};

vc6.0这样调用:
    myTest dd;
  dd.displayMessage( _T("sss") );

结果出现连接错误:
Linking...
myDlgDlg.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: void __thiscall myTest::displayMessage(class CString)" (__imp_?displayMessage@myTest@@QAEXVCString@@@Z)
Debug/myDlg.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

myDlg.exe - 2 error(s), 0 warning(s)

就是参数为CString不行,请问是怎么回事,请高手多多指教
tianlequan2回复于17日03点30分 
char*做函数参数确实是可以,但是假如我想在VC6.0中用CString作为参数调用该怎么办呢?
有什么好方法或者如何设置可以实现VS2005的CString和VC6.0的CString一致呢,这样我在VC6.0里就好用啦
 
wjcbbwlb回复于17日05点54分 
VS2005默认是unicode类型的,,你在VS2005的项目属性那里常规--字符集--使用多字节字符,,再编译
 
碧连天回复于17日08点00分 
vs2005设置中默认为使用 Unicode 字符集,改为 未设置。
 
wlpwtz回复于17日10点00分 
多谢高手帮助
主要问题是现在我们公司在VC6.0下开发,但是要用到VS2005的一个DataGridView控件
而我们现在开发大部分都是用CString类型,有什么其他好办法实现兼容~~~
 
oOoOo它它回复于17日11点48分 
没办法。你可以使用CComBSTR试试。VC6.0和VS2005的这个类应该是二进制兼容的。
 
李肖飞回复于17日13点24分 
还是一样
好像VC6.0是采用ANSI,而VS2005是采用UNICODE,可能就是这个原因
如何解决这个问题呢?有没有什么好办法可以解决这个问题?
 
wenjinghjkl回复于17日14点54分 
VS2005中的CString其实是一个模板定义,与VC6.0中的CString根本不是一个类,所以不能调用.

建议你将CString改为char*或wchar* 试一下
 
洪良岩回复于17日16点18分 
好的,我试试看~~~
 
lmmdd回复于17日17点30分 
你这是静态编译,没引入你的动态库lib文件导致的。在vs2005项目管理中填入lib文件,或者使用
#progma comment(lib,"libname.lib"):
 
ljryf回复于17日18点36分 
VC6.0工程里已经加上啦这个动态库的依赖啦

但是函数参数为整型的却可以通过
vs2005代码:
#pragma once
#ifdef TEST_EXPORTS
#define TEST_EXPORT  __declspec(dllexport)
#else
#define TEST_EXPORT __declspec(dllimport)
#endif

class  TEST_EXPORT myTest
{
public:
myTest(void);
void  displayMessage( CString str );
void  displayMessage();
void  displayMessage( int i );
public:
~myTest(void);
};

vc6.0这样调用:
    myTest dd;
  dd.displayMessage( );
  dd.displayMessage( 11 );

这中情况却可以连接成功,证明我的的设置没有问题·~~
会不会是VS2005的CString和VC6.0的CString不同导致的? 
顶:10 踩:8
对本文中的事件或人物打分:
当前平均分:0 (64次打分)
对本篇资讯内容的质量打分:
当前平均分:-0.4 (57次打分)
【已经有61人表态】
5票
感动
10票
路过
7票
高兴
9票
难过
8票
搞笑
7票
愤怒
8票
无聊
7票
同情
上一篇 下一篇
发表评论

网友评论仅供网友表达个人看法,并不表明本网同意其观点或证实其描述。

查看全部回复【已有0位网友发表了看法】