我有一个进程外的COM服务器可执行文件,它是用Visual Studio6.0开发的,在过去的10年里一直运行良好。现在我将这个项目转换到Visual Studio2010,在使用GetInterfaceFromGlobal()时遇到了一个问题。
我使用GIT保存指向每个COM客户端的IDispatch指针,这样我就可以从进程外的COM服务器向它们发送事件。经过调试,我发现的原因是没有。m_vec.Getsize()返回的连接数是4而不是1。即使我只添加了一个客户端,值也是4。我检查了ATLCOM.h,在该文件中,_DEFAULT_VECTORLENGTH在最近的版本中从1更改为4。
#ifndef _DEFAULT_VECTORLENGTH
#define _DEFAULT_VECTORLENGTH 4
#endif关于如何覆盖此值,有什么建议吗?我应该在我的代码中简单地将其重新定义为1吗?这会有什么副作用吗?还是我错过了什么?
提前谢谢你,哈里什
发布于 2010-11-17 20:14:23
不要碰那个常量--忽略它的变化。_DEFAULT_VECTORLENGTH控制CComDynamicUnkArray::Add()的工作方式,遍历CComDynamicUnkArray对象的代码应该跳过存储在其中的空指针。
如下所示:
for( int i = 0; i < array.GetSize(); i++ ) {
IUnknown* pointer = array.GetAt( i );
if( pointer == 0 ) {
continue;
}
//proceed with the pointer
}如果您决定更改该常量,请确保静态链接到ATL,并确保在ATL中也更改该常量并重新构建ATL。否则,您可能会因为described here的原因而遇到未定义的行为
https://stackoverflow.com/questions/4204172
复制相似问题