在ATL里的接口函数的参数可以是int型的吗? 要是可以的话,为什么在参数类型列表里面没有int.要是不可以的话用什么代替? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我记得用long 或者 short好象没有int的啊,(很久没用了:) wangweixing2000(星) 我的程序总是在那中断是怎么回事?typedef T _PtrClass; ~CComPtrBase() throw() { if (p) p->Release();//中断 } 完全可以,最好用long,因为int的长度与开发平台有很大关系! typedef T _PtrClass; ~CComPtrBase() throw() { if (p) p->Release();//中断 }有一个可能就是在此之前调用了CoUnitilize()这个错误有时候很隐蔽,我曾犯过。 typedef T _PtrClass; ~CComPtrBase() throw() { if (p) p->Release();//中断 }这个错误有可能是楼主使用智能指针,结果自己调用了Release,但忘记Detach它,所以在智能指针的析构函数中发生上述错误。至于int类型,不管在哪里都是可以使用的(包括在MIDL中),不过正如jinliu()所说,COM规范取缔了int类型,但是由于组件的实现者是程序员,所以还是可以使用int类型。因为在16位编译器上int代表16位数,在32位上代表32位数,而在64位上代表64位数,没有统一的规定(由于Integer这个词的意思导致),所以建议楼主不要使用int类型。 谢谢各位的解答.KingSeaMountain() 说的和我的错误很像.不知道怎么改.lop5712(LOP) 感谢你对我int的解释 STDMETHODIMP CAVLink::setstatuswords(CHAR* m_status, SHORT m_starbit, SHORT m_endbit){ bool flag=0; list<CStatuswords*> ::iterator it; for(it=m_statuswords.begin();it!=m_statuswords.end();it++) { if((*it)->m_status==m_status) { flag=1; strcpy((*it)->m_status,m_status); (*it)->m_startbit=m_starbit; (*it)->m_endbit=m_endbit; break; } } CStatuswords* statuswords=new CStatuswords; if(flag==0) { strcpy(statuswords->m_status,m_status); statuswords->m_startbit=m_starbit; statuswords->m_endbit=m_endbit; m_statuswords.insert(m_statuswords.end(),statuswords);// TODO: 在此添加实现代码 } return S_OK;}这是接口代码.当我调这个接口的时候就会出现上述的问题.请各位帮我看看. mfc画图问题 怎样获得一个对话框中的Tab 属性页数 在程序中动态改变系统的界面元素,如:改变桌面背景等,祥见内容 请问如何从一个文本文件中读取一行数据? 2000serve 的安装??请大家帮帮忙 哪有《C++的思想》这本书的电子版下载啊? 能不能对文档类里的数据进行定时地刷新???? 请高手指教,socket文件传输缓冲区的问题 谁有COM编程精彩实例光盘源代码? 请问《COM本质论》和《COM原理与应用》两本书哪本更适应初学者?? 谁在青岛呀工作呀?一个稍好的VC程序员月薪几何?欢迎各地朋友讨论呀? 请教关于字体和编码问题
好象没有int的啊,(很久没用了:)
~CComPtrBase() throw()
{
if (p)
p->Release();//中断
}
~CComPtrBase() throw()
{
if (p)
p->Release();//中断
}
有一个可能就是在此之前调用了CoUnitilize()
这个错误有时候很隐蔽,我曾犯过。
~CComPtrBase() throw()
{
if (p)
p->Release();//中断
}
这个错误有可能是楼主使用智能指针,结果自己调用了Release,但忘记Detach它,所以在智能指针的析构函数中发生上述错误。至于int类型,不管在哪里都是可以使用的(包括在MIDL中),不过正如jinliu()所说,COM规范取缔了int类型,但是由于组件的实现者是程序员,所以还是可以使用int类型。因为在16位编译器上int代表16位数,在32位上代表32位数,而在64位上代表64位数,没有统一的规定(由于Integer这个词的意思导致),所以建议楼主不要使用int类型。
lop5712(LOP) 感谢你对我int的解释
{
bool flag=0;
list<CStatuswords*> ::iterator it;
for(it=m_statuswords.begin();it!=m_statuswords.end();it++)
{
if((*it)->m_status==m_status)
{
flag=1;
strcpy((*it)->m_status,m_status);
(*it)->m_startbit=m_starbit;
(*it)->m_endbit=m_endbit;
break;
}
} CStatuswords* statuswords=new CStatuswords;
if(flag==0)
{
strcpy(statuswords->m_status,m_status);
statuswords->m_startbit=m_starbit;
statuswords->m_endbit=m_endbit;
m_statuswords.insert(m_statuswords.end(),statuswords);// TODO: 在此添加实现代码
}
return S_OK;
}
这是接口代码.当我调这个接口的时候就会出现上述的问题.请各位帮我看看.