遗留COM对象停止正确响应
Legacy COM Object Stops Responding Correctly
我有一个用c++编写的遗留COM对象。我通过安装程序注册COM库,并在c#包装器应用程序中实例化COM对象,如下所示
Type type = Type.GetTypeFromProgID("GrpSvr.GrpCall");
this.grouperServer = Activator.CreateInstance(type);
string strMsg = this.grouperServer.GroupInit(this.strCommandFilePath, true, true);
,然后使用COM对象进行各种操作,这些调用看起来像
int index = 2;
string strFieldName = "AXR";
this.grouperSever.MakeRec(strFieldName, index);
和这些工作良好(一开始)。然后,调用突然停止返回正确的结果。我可以确认我正在将正确的值传递给给定的方法,并且在某个点随机地,grouperServer
对象开始返回垃圾。
我不能在通常意义上调试库,以前没有使用过COM库。我可以在循环中向一个COM方法传递相同的值,并且该方法停止返回正确的结果,这表明这可能是动态语言运行时(DLR)的调用问题。我的问题变成了
我怎么能发现什么是错误的/调试COM对象?
感谢您的宝贵时间。
您没有提到应用程序的执行环境或线程模型。
我的猜测:你的COM对象在注册表(ThreadingModel=Apartment
)中被标记为STA对象,但在你的c#应用程序中,你没有在具有功能Windows消息循环的STA线程上使用它。
必读:"INFO: description and working of OLE Threading Models"。
这个问题也可能与:"StaTaskScheduler和STA线程消息泵送".
相关文章:
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- 两个 COM 组件中 ENUM 的重复条目
- COM 接口 c# 封送数组数组
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- C++ 信号和插槽不工作:插槽不响应事件
- NodeJs 服务器充斥着 UDP 广播,不发送响应
- 如何读取 C++ SAFEARRAY**,该 SAFEARRAY** 是 COM 互操作的结果,其中 C# 返回值为
- C++关于ENUM的问题。我得到的响应比枚举列表大
- 进程外 EXE 的免注册 COM
- 使用 Outlook 2016 Microsoft Store 连接到 Outlook COM
- 如何从COM模块中的函数返回字符串数组?
- 应用程序在打开的简历中捕获视频后没有响应
- 使用 cpprest (Casablanca) 返回 PDF 响应
- 如何在C++非托管/本机 DLL 中从注册免费 COM C# 托管 DLL 创建 COM 对象
- Windows (COM) API 的行为不同,没有特定的库
- 为什么当通过 TCP 发送的消息速率增加时,请求-响应消息对的延迟会降低?
- 我是否可以使用 win32 句柄以编程方式记录发送到/接收到 USB/COM 的内容
- SslStream作为COM对象访问时响应不同
- 遗留COM对象停止正确响应