请问VC6.0如何调用VC2005的dll?

jackson35296 2008-06-22 08:39:48
因为VC2005加了许多新的东西,但我不习惯用VC2005,程序主体是用VC6.0写的,因此将VC2005的那部分写成动态链接库。
但是无论怎么修改dll的代码,VC6.0下都会编译失败,而该dll用VC2005调用则正常。请问高手,VC6.0调用VC2005的dll,dll程序的编写应该注意些什么?
我dll的主要代码如下:
extern "C" _declspec(dllexport) void Convert(LPCTSTR pszFileName1,LPCTSTR pszFileName2)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CImage kk;
kk.Load(pszFileName1);
kk.Save(pszFileName2);
}
不加extern "C"也不行,直接写入def文件也不行,有没有AFX_MANAGE_STATE(AfxGetStaticModuleState())也不行,总会出现
error LNK2001: unresolved external symbol "__declspec(dllimport) void __cdecl Convert(char const *,char const *)" (__imp_?Convert@@YAXPBD0@Z)
请问高手如何解决?高分送出
...全文
371 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jameshooo 2008-06-23
  • 打赏
  • 举报
回复
楼主也很厉害啊 .
jackson35296 2008-06-23
  • 打赏
  • 举报
回复
楼上的大虾厉害啊,根据你的指点,问题解决了,谢了!
cnzdgs 2008-06-22
  • 打赏
  • 举报
回复
感觉应该更像是Unicode的问题,建议你把2005的项目改成“使用多字节字符集”,我记得2005中的wchar_t与以前VC版本有所不同。
  • 打赏
  • 举报
回复
调用的时候用宽字符
const wchar_t*
jameshooo 2008-06-22
  • 打赏
  • 举报
回复
DLL是用UNICODE编译的吧(2005默认使用UNICODE),而exe使用的是ANSI
cnzdgs 2008-06-22
  • 打赏
  • 举报
回复
这个错误应该你没有导入lib文件。如果使用lib来连接不需要extern "C"也不需要def文件。
gamedragon 2008-06-22
  • 打赏
  • 举报
回复
VC2005和VC6的C++函数命名规则不同,这就是问题所在

__imp_?Convert@@YAXPBD0@Z
这个就是VC6把Convert这个函数在内部的命名。

解决的方法之一就是用C命名规则来声明函数。
在DLL实现里加extern "C"做约束
在主程序里声明Convert函数的地方也要加extern "C"做约束。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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