高分求教:我得到了接口指针,但运行到调用该接口的函数时总是异常退出。

smilemac 2005-05-07 10:56:21
就是执行到这一句的时候出错:
_com_dispatch_method(this, 0x2, DISPATCH_METHOD, VT_I2, (void*)&_result, NULL);
...全文
149 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
miladuo 2005-05-08
  • 打赏
  • 举报
回复
帮你顶
老夏Max 2005-05-08
  • 打赏
  • 举报
回复
看看你是不是犯了以下的错误:
http://www.vckbase.com/document/viewdoc/?id=1183
wangweixing2000 2005-05-08
  • 打赏
  • 举报
回复
首先确保接口创建成功
估计调用方法中参数给的不匹配,你仔细看看!VT_I2是SHORT类型。
smilemac 2005-05-08
  • 打赏
  • 举报
回复
另外,我一开始用的是CComPtr来做的,结果出现了这个问题,我就改用其他几种方式结果都不行,用msdn的现成例子程序也不行,只有在资源里insert然后创建wrapper的方式可以.真是奇怪.
smilemac 2005-05-08
  • 打赏
  • 举报
回复
pIX的类型是_DTestOcx3, 这个类型是从TestOcx3.tlb中import进来的,有问题吗?
Frank123 2005-05-08
  • 打赏
  • 举报
回复
你的pIX是不是IID_IX3 *类型的?
建议使用CComQIPtr等智能指针,
关注,帮你顶
smilemac 2005-05-08
  • 打赏
  • 举报
回复
我所有返回值都检查了,都没问题.只有一个线程main,程序如下

_tmain(int argc, ...)
{
...

CLSID clsid;

HRESULT hr = CLSIDFromProgID(T2COLE("TESTOCX3.TestOcx3Ctrl.1"), &clsid);

const IID IID_IX3 =
{ 0x60528975, 0xD388, 0x477F,
{ 0xB9, 0x82, 0x11, 0x60, 0xCE, 0x97, 0x05, 0x08 } };

hr = ::CoCreateInstance(clsid,
NULL,
CLSCTX_INPROC_SERVER,
IID_IX3,
(void**)&pIX) ;
if (SUCCEEDED(hr))
{
trace("Succeeded creating component.") ;
pIX->Test() ; //*********************************
//试图访问不可访问的内存,程序退出

pIX->Release() ;
}

...
}
xuzheng318 2005-05-08
  • 打赏
  • 举报
回复
不要在线程之间传递原始接口指针
VCSQLVB 2005-05-08
  • 打赏
  • 举报
回复
得到的接口指针是否有效,检查CoCreateInstance函数的返回值是否为0.
smilemac 2005-05-08
  • 打赏
  • 举报
回复
应该不是参数问题,因为我后来又加了一个没有返回类型也没有传入参数的函数,结果还是不行,重新创建一个新的工程,加入一个方法,什么都不作,完全是VC生成的代码,结果也都一样。我是用"VC6.0/MFC ActiveX ControlWizard"生成的工程和代码。有问题吗?

3,245

社区成员

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

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