Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
旧COM对象停止正确响应 我有一个用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);_C#_C++_Winforms_Dynamic_Com - Fatal编程技术网

旧COM对象停止正确响应 我有一个用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对象停止正确响应 我有一个用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);,c#,c++,winforms,dynamic,com,C#,C++,Winforms,Dynamic,Com,然后我将COM对象用于各种操作,这些调用如下所示 int index = 2; string strFieldName = "AXR"; this.grouperSever.MakeRec(strFieldName, index); 而且这些(一开始)很好用。然后,突然之间,调用停止返回正确的结果。我可以确认我正在将正确的值传递给一个给定的方法,并且在某个时刻,grouperServer对象开始返回垃圾 我无法以通常的方式调试库,以前也没有使用过COM库。我可以在循环中传递一个COM方法相同的

然后我将COM对象用于各种操作,这些调用如下所示

int index = 2;
string strFieldName = "AXR";
this.grouperSever.MakeRec(strFieldName, index);
而且这些(一开始)很好用。然后,突然之间,调用停止返回正确的结果。我可以确认我正在将正确的值传递给一个给定的方法,并且在某个时刻,
grouperServer
对象开始返回垃圾

我无法以通常的方式调试库,以前也没有使用过COM库。我可以在循环中传递一个COM方法相同的值,并且该方法停止返回正确的结果,这表明这可能是动态语言运行库(DLR)的调用问题。我的问题就变成了

如何找出/调试COM对象的错误?


谢谢您的时间。

您没有提到应用程序的执行环境或线程模型

我猜:您的COM对象在注册表中被标记为STA对象(
ThreadingModel=Apartment
),但在您的C#应用程序中,您没有在具有功能性Windows消息循环的STA线程上使用它

如果执行此操作,请确保此STA线程是访问COM对象的唯一线程。没有其他线程可以在不封送的情况下直接调用它

A必须为:

这个问题也可能与:
“.

你的问题需要很多洞察力才能回答这个问题。所以,调试一下,自己看看。除了标准代码可能具有的所有其他功能外,您的“遗留”表明com对象可能存在更新软件环境所揭示的错误。感谢您的非常有用的回复。不幸的是,您不能以通常的方式调试COM对象(您可以使用本机代码),因此我要问“如何找出COM对象的错误”。不幸的是,你把“千里眼”和“经验”弄错了。没有。你没有提供你的COM对象或某种方法来识别它,所以任何回答的人都必须列出所有可能做错的事情,并且可能在一段时间内有效,或者是一个认证的通灵师。伙计,如果你帮不上忙,就做一个。我已经清楚地表明,我自己没有访问COM库代码的权限,我想知道如何着手查找问题。可能有很多问题,但是,我的某个人(显然不是你自己)在这方面有丰富的经验(使用遗留COM库),并且遇到了这个问题。如果你不能帮我,为什么要浪费你自己的时间来评论。附言。那是修辞。非常感谢你的回答。这正是我想要的线索。我使用
dynamic
在主[UI]线程上执行此代码,有时通过.NET4.0tpl在后台线程池线程上执行此代码(使用
Task.Factory.StartNew(()=>…)
)。我现在将阅读链接。。。再次感谢您的时间。@Killercam,没问题。根据您的UI框架,使用
Control.Invoke
Dispatcher.Invoke
从UI线程以外的任何线程访问COM对象。我认为你的问题被不公平地否决了。