关于QueryInterface( IID_IDirectDraw。。。之后失败的情况

leoyang99 2008-10-08 05:07:30
我在下面
m_DirectDrawCreate=(DIRECTDRAWCREATE)GetProcAddress(m_DDraw_dll, "DirectDrawCreate");

hr = m_DirectDrawCreate(NULL, &DD, NULL);
if(hr!=DD_OK)
{
return;
}
if( DD->QueryInterface( IID_IDirectDraw, (void **)&m_pdd ) != DD_OK )
{
return;
}

DD->Release();
hr=m_pdd->SetCooperativeLevel(m_hwnd, DDSCL_NORMAL);

跑到“SetCooperativeLevel”这里的时候程序会异常,百般调试都无奈了,请指点!
...全文
113 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jameshooo 2008-10-09
  • 打赏
  • 举报
回复
有没有初始化环境?
Amuro1987218 2008-10-09
  • 打赏
  • 举报
回复
查看 m_pdd的声明

是 LPDIRECTDRAW还是 LPDIRECTDRAW7?
leoyang99 2008-10-09
  • 打赏
  • 举报
回复
大概知道了,是因为我这个“m_pdd ”的定义的头文件ddraw.h在系统了,版本不清楚,跟IID_IDirectDraw这个对应不上的缘故,对吧?
Amuro1987218 2008-10-09
  • 打赏
  • 举报
回复
总之很有可能是申请的 GUID接口 和你的 m_pDD不匹配,而 后者其函数地址 早绑定。
Amuro1987218 2008-10-09
  • 打赏
  • 举报
回复
你因该查询 IID_IDirectDraw7接口吧

IID_IDirectDraw接口 有这个 SetCooperativeLevel方法么?
wangweixing2000 2008-10-08
  • 打赏
  • 举报
回复

m_pDD->SetCooperativeLevel( m_hWnd, DDSCL_NORMAL )
更改为
if(m_pDD != NULL)
{
if(m_hWnd != NULL)
{
m_pDD->SetCooperativeLevel( m_hWnd, DDSCL_NORMAL );
}
else
{
ATLTRACE("m_hWnd is NULL \n");
}
}
else
{
ATLTRACE("m_pDD is NULL \n");
}


调试一下,看看输出啥信息,八成是上面那个为NULL
scklotz 2008-10-08
  • 打赏
  • 举报
回复
切入到反汇编跟踪一下,看下m_pdd->SetCooperativeLevel函数地址是不是有效的地址
oyljerry 2008-10-08
  • 打赏
  • 举报
回复
m_pdd 是不是获得正确的指针
zzz822163 2008-10-08
  • 打赏
  • 举报
回复

HRESULT hr;

hr = DirectDrawCreate( NULL, &m_pDD, NULL );
if( FAILED(hr) )
{
return FALSE;
}
m_pDD->SetCooperativeLevel( m_hWnd, DDSCL_NORMAL );

直接这样试试看
zzz822163 2008-10-08
  • 打赏
  • 举报
回复
什么样的异常,m_pdd,m_hwnd都有效吗

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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