vc6程序移植到vs2005环境下编译错误问题
我在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不行,请问是怎么回事,请高手多多指教
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不同导致的? |












