用智能指针实现com连接点,import后的tlh相关部分
struct __declspec(uuid("697c743a-86e2-42e9-b6ab-4f4916285795"))
_ServerEvents : IDispatch
{
// Methods:
HRESULT OnCompleteEvent (struct CompleteEvent * NewCompleteEvent );
};
...
struct __declspec(uuid("76c38bf1-4af8-4e47-a2ee-c269d58d3bfa"))
CompleteEvent : IDispatch
{
...
}send方法触发OnCompleteEvent事件
我是这么定义
BEGIN_DISPATCH_MAP( CAbc, CDialog)
DISP_FUNCTION_ID(CAbc,"OnCompleteEvent",1,OnCompleteEvent,VT_EMPTY,VTS_VARIANT)
END_DISPATCH_MAP( )
...
void CHhhkkDlg::OnExecutionOver2(struct CompleteEvent *NewCompleteEvent )
{
printf("success");
//下面这行获取CompleteEvent相应的对象,运行时错误
Object o=NewCompleteEvent -> GetObject();
}我的问题是
我的程序能正确的响应事件,打印出"success",但是每次当GetObject的时候,就说Ole错误,可是用_com_error和COleException都捕捉不到,我怀疑是不是参数再DispatchMap中声明错了,那应该声明为什么呢?还是另外有别的原因?
struct __declspec(uuid("697c743a-86e2-42e9-b6ab-4f4916285795"))
_ServerEvents : IDispatch
{
// Methods:
HRESULT OnCompleteEvent (struct CompleteEvent * NewCompleteEvent );
};
...
struct __declspec(uuid("76c38bf1-4af8-4e47-a2ee-c269d58d3bfa"))
CompleteEvent : IDispatch
{
...
}send方法触发OnCompleteEvent事件
我是这么定义
BEGIN_DISPATCH_MAP( CAbc, CDialog)
DISP_FUNCTION_ID(CAbc,"OnCompleteEvent",1,OnCompleteEvent,VT_EMPTY,VTS_VARIANT)
END_DISPATCH_MAP( )
...
void CHhhkkDlg::OnExecutionOver2(struct CompleteEvent *NewCompleteEvent )
{
printf("success");
//下面这行获取CompleteEvent相应的对象,运行时错误
Object o=NewCompleteEvent -> GetObject();
}我的问题是
我的程序能正确的响应事件,打印出"success",但是每次当GetObject的时候,就说Ole错误,可是用_com_error和COleException都捕捉不到,我怀疑是不是参数再DispatchMap中声明错了,那应该声明为什么呢?还是另外有别的原因?
解决方案 »
- 一段用vc++ 抓网页的代码老有错 希望高手帮忙看看
- 怎么样通过idl文件生成相对应的tlh,tli文件!3Q
- 第一次搞COM,问个调用的问题。
- 设置ClistCtrl 单元格颜色
- 请问:我用的是mscomm控件。我想检测串口的cd,cts,dsr等引角上电压的变化,请问怎样确定oncomm()已经被触发?
- 建了一个win32控制台程序,当添加Activex控件时,提示要classwizard的支持,怎么弄
- tabcontrol
- odbc simple question??
- 怎样打印查询结果?help me?
- 进程通信(消息队列)【WinCE/MFC】
- 急,急,急,求助,有没有人做过Zebra 90Xi 系列的条码打印程序啊?
- 高手请回答,,,,,,
void CHhhkkDlg::OnExecutionOver2(struct CompleteEvent *NewCompleteEvent )
应该是
void CAbc::OnCompleteEvent(struct CompleteEvent *NewCompleteEvent )
把idl文件和Getobject函数贴出来看一下
http://202.107.104.22/chl/tommy/Problem.zip
然后F11单步跟踪,看他在哪步出的错
析构函函数作了以下几个事情
1.AfxConnectionUnadvise
2.CoUnitialize
我在析构函数里设置了段点,发现每次都是先调析构然后再进入OnComplete响应函数
main.cpp
int main(){
RightFax o;
o.SendFax();//稍候会激发OnComplete事件
scanf("%d",&d");//阻塞进程
}
可是确认并且避免问题发生呢
我把指针设置到上面了,就是这步出的错,我按F10就会产生异常,F11倒没试验过,我没有com的源码,F11会出现什么效果?明天上班试验试验