组件端:
com1 ,com2 两个组件;
com1中有一个方法 method1();
com2中有一个方法 method2();
在客户端的一个函数中
myLogin()
{
    Icom1Ptr smtpcom1(__uuidof(cmo1));//1
    Icom2Ptr smtpcom2(__uuidof(cmo1));//2
    smtpcom1->method1();//3
    smtpcom2->method2();//4
    if(smtpcom1&&smtpcom2)//5
    {
        smtpcom1.Release();//6
        smtpcom3.Release();//7
     }
}
第一次调用正确;
可是第二次调用当走到第三句时出错!!!????
why??????????
智能指针到底是怎麽用的?????

解决方案 »

  1.   

    myLogin()
    {
        Icom1Ptr smtpcom1(__uuidof(cmo1));//1
        Icom2Ptr smtpcom2(__uuidof(cmo1));//2
        smtpcom1.CreateObject();
        smtpcom2.CreateObject();
        smtpcom1->method1();//3
        smtpcom2->method2();//4
        if(smtpcom1&&smtpcom2)//5
        {
            smtpcom1.Release();//6
            smtpcom3.Release();//7
         }
    }
    要先创建再释放
      

  2.   

    sorry 写错了是
    Icom1Ptr smtpcom1(__uuidof(cmo1));//1
        Icom2Ptr smtpcom2(__uuidof(cmo1));//2
        smtpcom1.CreateInstance(__uuidof(com1));
        smtpcom2.CreateInstance(__uuidof(com2));
        smtpcom1->method1();//3
        smtpcom2->method2();//4
        if(smtpcom1&&smtpcom2)//5
        {
            smtpcom1.Release();//6
            smtpcom3.Release();//7
         }    
      

  3.   

    try:
    Icom1Ptr smtpcom1(__uuidof(cmo1));//1
        Icom2Ptr smtpcom2(__uuidof(cmo1));//2
        smtpcom1.CreateInstance(__uuidof(com1));
        smtpcom2.CreateInstance(__uuidof(com2));
        smtpcom1->method1();//3
        smtpcom2->method2();//4
        if(smtpcom1&&smtpcom2)//5
        {
            smtpcom1 = NULL;//6
            smtpcom3 = NULL;//7
         }
      

  4.   

    myLogin()
    {
        Icom1Ptr smtpcom1(__uuidof(cmo1));//1 object has already been created;
        Icom2Ptr smtpcom2(__uuidof(cmo1));//2 object has already been created;
        //smtpcom1.CreateObject();
        //smtpcom2.CreateObject();
        smtpcom1->method1();//3
        smtpcom2->method2();//4
        if(smtpcom1&&smtpcom2)//5
        {
            smtpcom1.Release();//6
            smtpcom3.Release();//7
         }
    }
    要先创建再释放
    this is not correct answer
    though thank you also!!
      

  5.   

    smtpcom1.Release();//6
    smtpcom3.Release();//7不需要的,两个智能指针类释构时会自己动release,有这两句也不会造成错误,怀疑源程序不是这样的,或者是你的方法中有错误。
      

  6.   

    com1 ,com2 两个组件;同时放在一个com+程序中
    stdafx.h 中声明为 "FREE" 
    com1中有一个方法 method1()//;支持事务和组件池, MultiThread ,聚合 
    {
      //do something;
      m_spObjectContext.SetComplete();
    }
    com2中有一个方法 method2()//;支持事务和组件池 ,MultiThread ,聚合
    {
      //do something;
      m_spObjectContext.SetComplete();
    }
    在客户端的一个函数中
    myLogin()
    {
        Icom1Ptr smtpcom1(__uuidof(cmo1));//1
        Icom2Ptr smtpcom2(__uuidof(cmo1));//2
        smtpcom1->method1();//3
        smtpcom2->method2();//4
        if(smtpcom1&&smtpcom2)//5
        {
            smtpcom1.Release();//6
            smtpcom3.Release();//7
         }
    }
    第一次调用{组件池为空}正确;
    可是第二次调用(组件池不为空)当走到第三句时出错!!!????
    why??????????
    智能指针到底是怎麽用的?????
      

  7.   

    请教   Erlin(很多年以后,我有了个绰号,叫白痴) 
    组件端:
    stdafx.h 中声明为“FREE”
    com1 ,com2 两个组件;
    com1中有一个方法 method1();支持组件池和事务,multi,聚合
    com2中有一个方法 method2();支持组件池和事务,multi,聚合在客户端的一个函数中
    myLogin()
    {
        Icom1Ptr smtpcom1(__uuidof(cmo1));//1
        Icom2Ptr smtpcom2(__uuidof(cmo1));//2
        smtpcom1->method1();//3
        smtpcom2->method2();//4
        if(smtpcom1&&smtpcom2)//5
        {
            smtpcom1.Release();//6
            smtpcom3.Release();//7
         }
    }
    第一次调用正确;
    可是第二次调用当走到第三句时出错!!!????
    why??????????
    智能指针到底是怎麽用的?????
      

  8.   

    请教   Erlin(很多年以后,我有了个绰号,叫白痴) 
    组件端:
    stdafx.h 中声明为“FREE”
    com1 ,com2 两个组件;
    com1中有一个方法 method1();支持组件池和事务,multi,聚合
    com2中有一个方法 method2();支持组件池和事务,multi,聚合在客户端的一个函数中
    myLogin()
    {
        ......
    }
    第一次调用正确;
    可是第二次调用当走到第三句时出错!!!????
    why??????????
    智能指针到底是怎麽用的?????
      

  9.   

    Icom1Ptr smtpcom1;
        Icom2Ptr smtpcom2;
        smtpcom1.CreateInstance(__uuidof(com1));
        smtpcom2.CreateInstance(__uuidof(com2));
        smtpcom1->method1();//3
        smtpcom2->method2();//4
        smtpcom1.Release();//6
        smtpcom3.Release();//7
    不会有错的
      

  10.   

    感谢您使用微软产品!com1中有一个方法 method1()//;支持事务和组件池, MultiThread ,聚合 
    {
      //do something;
      m_spObjectContext.SetComplete();
    }
    com2中有一个方法 method2()//;支持事务和组件池 ,MultiThread ,聚合
    {
      //do something;
      m_spObjectContext.SetComplete();
    }你的m_spObjectContext是怎么得到的?存起来的吗?组件池中使用的资源一定要context neutral,不能把第一次运行的m_spObjectContext cache起来作为后用。
    - 微软全球技术中心 VC技术支持 本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款 
    (http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。 
    为了为您创建更好的讨论环境,请参加我们的用户满意度调查 
    (http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。