遗留COM对象停止正确响应
本文关键字:响应 COM 对象 遗留 | 更新日期: 2023-09-27 17:53:42
我有一个用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线程消息泵送".