vs2005调用VC6下的DLL出问题

hit_spaceknight 2009-07-31 09:14:08
我在VC6下写了个工程,加载的DLL也是VC6下的mfc dll ,没有问题。在VS2005上调试的时候,调用DLL的接口时,出错,断点在获取实例句柄时失败。请问怎么解决,我对VS2005不熟。

分不多了,呵呵。
...全文
205 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hit_spaceknight 2009-07-31
  • 打赏
  • 举报
回复
dll不是我自己写的,你说的这点我也考虑到了,我没有dll源码,这个让人很郁闷啊。
[Quote=引用 6 楼 tttyd 的回复:]
错误应该在ASSERT(afxCurrentInstanceHandle != NULL); 这一行代码吧。

你把AfxSetResourceHandle放在你的DLL模块中了?
[/Quote]
雪影 2009-07-31
  • 打赏
  • 举报
回复
错误应该在ASSERT(afxCurrentInstanceHandle != NULL); 这一行代码吧。

你把AfxSetResourceHandle放在你的DLL模块中了?
hit_spaceknight 2009-07-31
  • 打赏
  • 举报
回复
补充一句,CPOSWatchPRO的父类是CWnd
class AFX_CLASS_EXPORT CPOSWatchPRO : public CWnd
hit_spaceknight 2009-07-31
  • 打赏
  • 举报
回复
//一下是主程序对话框中代码
if (dlg.DoModal() == IDOK)
{
m_LoginItem.channel = 0xFFFF;
m_pPOSWatch[0] = new CPOSWatch(0);//在调用该构造函数时出错
m_pPOSWatch[0]->Login(&m_LoginItem);

}
else
。。。。。。。。。。。。。。。。。。。。
//以下是自己的类继承DLL中的类
class CPOSWatch : public CPOSWatchPRO
{

public:
CPOSWatch();
CPOSWatch(int id);
virtual ~CPOSWatch();
...............
}
//以下是构造函数
CPOSWatch::CPOSWatch()
{
}

CPOSWatch::CPOSWatch(int id):CPOSWatchPRO(id)
{//我在此处打了断点,按F10后出错

}

//以下是出错后断点位置
_AFXWIN_INLINE CWinApp* AFXAPI AfxGetApp()
{ return afxCurrentWinApp; }
5F47AF1D push ebp
5F47AF1E mov ebp,esp
5F47AF20 push ebx
5F47AF21 push esi
5F47AF22 push edi
5F47AF23 call AfxGetModuleState (5F490251h)
5F47AF28 cmp dword ptr [eax+8],0
5F47AF2C jne AfxGetInstanceHandle+22h (5F47AF3Fh)
5F47AF2E push 13h
5F47AF30 push offset _szAfxWinInl (5F4AC1C8h)
5F47AF35 call AfxAssertFailedLine (5F476AF0h)
5F47AF3A test eax,eax
5F47AF3C je AfxGetInstanceHandle+22h (5F47AF3Fh) //此处出错
5F47AF3E int 3 //断点位置
5F47AF3F xor eax,eax
5F47AF41 test eax,eax
5F47AF43 jne AfxGetInstanceHandle+6 (5F47AF23h)
_AFXWIN_INLINE HINSTANCE AFXAPI AfxGetInstanceHandle()
5F47AF45 call AfxGetModuleState (5F490251h)
5F47AF4A mov eax,dword ptr [eax+8]
5F47AF4D pop edi
5F47AF4E pop esi
5F47AF4F pop ebx
5F47AF50 pop ebp
5F47AF51 ret
{ ASSERT(afxCurrentInstanceHandle != NULL);
return afxCurrentInstanceHandle; }
hit_spaceknight 2009-07-31
  • 打赏
  • 举报
回复
这个方法我之前试过了,不管用,我现在都搞的晕头转向的,不知道啥原因。
[Quote=引用 1 楼 tttyd 的回复:]
C/C++ code//DLL资源转换 HMODULE hmodule= GetModuleHandle("Smoothness.dll");
AfxSetResourceHandle(hmodule);//这里添加你的DLL调用代码
AfxSetResourceHandle(AfxGetApp()->m_hInstance);
[/Quote]
yjukh 2009-07-31
  • 打赏
  • 举报
回复
能不能贴点代码?
获取哪个句柄失败?
2005的语法更严格一些
雪影 2009-07-31
  • 打赏
  • 举报
回复
//DLL资源转换
HMODULE hmodule = GetModuleHandle("Smoothness.dll");
AfxSetResourceHandle(hmodule);
//这里添加你的DLL调用代码

AfxSetResourceHandle(AfxGetApp()->m_hInstance);
hit_spaceknight 2009-07-31
  • 打赏
  • 举报
回复
不知我再给它封装一次行不行。

15,471

社区成员

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

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