组件端:
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??????????
智能指针到底是怎麽用的?????
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??????????
智能指针到底是怎麽用的?????
{
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
}
}
要先创建再释放
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
}
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
}
{
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!!
smtpcom3.Release();//7不需要的,两个智能指针类释构时会自己动release,有这两句也不会造成错误,怀疑源程序不是这样的,或者是你的方法中有错误。
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??????????
智能指针到底是怎麽用的?????
组件端:
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??????????
智能指针到底是怎麽用的?????
组件端:
stdafx.h 中声明为“FREE”
com1 ,com2 两个组件;
com1中有一个方法 method1();支持组件池和事务,multi,聚合
com2中有一个方法 method2();支持组件池和事务,multi,聚合在客户端的一个函数中
myLogin()
{
......
}
第一次调用正确;
可是第二次调用当走到第三句时出错!!!????
why??????????
智能指针到底是怎麽用的?????
Icom2Ptr smtpcom2;
smtpcom1.CreateInstance(__uuidof(com1));
smtpcom2.CreateInstance(__uuidof(com2));
smtpcom1->method1();//3
smtpcom2->method2();//4
smtpcom1.Release();//6
smtpcom3.Release();//7
不会有错的
{
//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))。