调用COM的接口函数出现问题

三文鱼也会飞 2008-06-16 04:19:31
CoCreateInstance调用已经成功,

INeuGraphBuilder * pNeu;
if(CoCreateInstance(CLSID_NeuGraphBuilder, NULL, CLSCTX_LOCAL_SERVER, IID_INeuGraphBuilder, (void ** )&pNeu))
{
AfxMessageBox("success");
pNeu->do();//
}
弹出success后,使用指针pNeu调用接口函数do()时告诉我:

[color=#0000FF]Unhandled exception at 0x0041b42f in test4.exe: 0xC0000005: Access violation reading location 0x00000000.[/color]

do()函数里只是AfxMessageBox("121");
调用它的工程也是MFC工程

请问这是为什么?

...全文
157 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
gaogaf 2009-12-28
  • 打赏
  • 举报
回复
请问是把CoCreateInstance改成::CoCreateInstance吗?
三文鱼也会飞 2008-06-17
  • 打赏
  • 举报
回复
问题解决了,这样写就对了,谢谢大家了,结帐!
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr = NULL;
IVMR * pVMR = NULL;
hr = CoInitialize(NULL);

if(S_OK == hr)
{
MessageBox(NULL, "CoInitialize success", "CoInitialize success", NULL);
}
else
{
MessageBox(NULL, "CoInitialize fail", "CoInitialize fail", NULL);
}

hr = ::CoCreateInstance(CLSID_VMR, NULL, CLSCTX_INPROC_SERVER , IID_IVMR, (void ** )&pVMR);

if(S_OK == hr)
{
MessageBox(NULL, "CoCreateInstance success", "CoCreateInstance success", NULL);
pVMR->add();
}
else
{
MessageBox(NULL, "CoCreateInstance fail", "CoCreateInstance fail", NULL);
}
return 0;
}
三文鱼也会飞 2008-06-16
  • 打赏
  • 举报
回复
还是CoCreateInstance的问题
三文鱼也会飞 2008-06-16
  • 打赏
  • 举报
回复
我试过了,一下结果
Ctest4App::Ctest4App()
{
HRESULT hr = S_OK;
INeuGraphBuilder * pNeu = NULL;

hr = CoInitialize(NULL);

if(S_OK == hr)
{
AfxMessageBox("CoInitialize success"); // 成功 }
else
{
AfxMessageBox("CoInitialize fail");
}

if(S_OK == CoCreateInstance(CLSID_NeuGraphBuilder, NULL, CLSCTX_LOCAL_SERVER, IID_INeuGraphBuilder, (void ** )&pNeu))
{
AfxMessageBox("CoCreateInstance success"); // 失败 pNeu->Play();
}
else
{
AfxMessageBox("CoCreateInstance fail");
}

}
tjsjping 2008-06-16
  • 打赏
  • 举报
回复
CoCreateInstance只有返回S_OK才是成功,搂住判断的方法有问题
三文鱼也会飞 2008-06-16
  • 打赏
  • 举报
回复
对没调用CoInitialize,我调用一下
cnzdgs 2008-06-16
  • 打赏
  • 举报
回复
刚才没注意看。CoCreateInstance返回0(S_OK)才是成功。你是不是没调用CoInitialize之类的初始化函数?
三文鱼也会飞 2008-06-16
  • 打赏
  • 举报
回复
没错 pNeu == 0x00000000

_vfptr的问题,竟然有错误__vfptr CXX0030: Error: expression cannot be evaluated

这是为什么?


DarknessTM 2008-06-16
  • 打赏
  • 举报
回复
判断成功与否应该是 pNeu == 0
做鸡真好吃 2008-06-16
  • 打赏
  • 举报
回复
应该是根本组建没成功创建
三文鱼也会飞 2008-06-16
  • 打赏
  • 举报
回复
什么也不写都不行了,应该不是MessageBox的问题
三文鱼也会飞 2008-06-16
  • 打赏
  • 举报
回复
用MessageBox也不行,
接口函数do是这样写的:
STDMETHODIMP CNeuGraphBuilder::do(void)
{
MessageBox(NULL, "play", "play", NULL);
return S_OK;
}
cnzdgs 2008-06-16
  • 打赏
  • 举报
回复
用MessageBox。

3,245

社区成员

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

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