首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Visual Studio2010中,由于进程外COM服务器,GetInterfaceFromGlobal()调用失败

在Visual Studio2010中,由于进程外COM服务器,GetInterfaceFromGlobal()调用失败
EN

Stack Overflow用户
提问于 2010-11-17 20:08:18
回答 1查看 514关注 0票数 1

我有一个进程外的COM服务器可执行文件,它是用Visual Studio6.0开发的,在过去的10年里一直运行良好。现在我将这个项目转换到Visual Studio2010,在使用GetInterfaceFromGlobal()时遇到了一个问题。

我使用GIT保存指向每个COM客户端的IDispatch指针,这样我就可以从进程外的COM服务器向它们发送事件。经过调试,我发现的原因是没有。m_vec.Getsize()返回的连接数是4而不是1。即使我只添加了一个客户端,值也是4。我检查了ATLCOM.h,在该文件中,_DEFAULT_VECTORLENGTH在最近的版本中从1更改为4。

代码语言:javascript
复制
#ifndef _DEFAULT_VECTORLENGTH
#define _DEFAULT_VECTORLENGTH 4
#endif

关于如何覆盖此值,有什么建议吗?我应该在我的代码中简单地将其重新定义为1吗?这会有什么副作用吗?还是我错过了什么?

提前谢谢你,哈里什

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-17 20:14:23

不要碰那个常量--忽略它的变化。_DEFAULT_VECTORLENGTH控制CComDynamicUnkArray::Add()的工作方式,遍历CComDynamicUnkArray对象的代码应该跳过存储在其中的空指针。

如下所示:

代码语言:javascript
复制
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的原因而遇到未定义的行为

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4204172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档