我想利用Outlook Automation生成ActiveX控件取得Outlook上的信息,目前的代码是:
if (!olApp.CreateDispatch("Outlook.Application", &e))
{
}
NameSpace olNs(olApp.GetNamespace("MAPI"));
....但是当多个做好的控件并行运行时(比如在同一页面配置多个该控件,然后刷新),会出现outlook错误--{"0x77fcca16"的命令参照了"0x3a478374"的内存,该内存不能写操作...}
个人感觉是并行运行时有Outlook Automation冲突,联想到olApp.CreateDispatch的语句,觉得并行时如果olApp被创建了,系统应该自动让其他同类操作停止,并利用已经创建的olApp,但是现在的情况估计是并行的每个控件都要做olApp.CreateDispatch不知对于这样的处理有没有什么更好的办法,例如在做olApp.CreateDispatch前先检查一下该Dispatch接口是否已经生成。另外,不知上面的outlook错误到底是由什么引起的?急切等待各位高手的指教!!

解决方案 »

  1.   

    多谢回复。
    因为是多个控件并行时出的错,而且没有规律,所以不好Debug,曾经尝试用一个压力测试的软件来模拟并行环境,但是到了那里又不出错了。
    不管怎样debug,主要是想从机制上防止冲突,不知底层是否有相应处理机制。
    希望做过类似项目的高手发表意见。
      

  2.   

    多个运行的话要考虑创建和销毁指针,我一般使用智能指针来管理,可能你还要注意互斥
    CComQIPtr <_Application> spApp(Application); 
    ...
      

  3.   

    gracezhu(eutom) 能不能给个例子阿,多谢!