【发布时间】:2014-03-25 18:38:26
【问题描述】:
我有一个用 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 对象可能存在较新的软件环境显示的错误。
-
感谢您非常有帮助的回复。不幸的是,您无法以通常的方式调试 COM 对象[您会使用本机代码],因此我问'我如何才能找出 COM 对象有什么问题'。不幸的是,您将“千里眼”这个词误认为“经验”。
-
不。你没有提供你的 COM 对象或某种方式来识别它,所以任何回答的人都必须列出所有可能做错的事情,并且可能会在一段时间内起作用,或者是经过认证的通灵者。
-
老兄,如果你帮不上忙,那就做一个。我已经明确表示,我自己无法访问 COM 库代码,我想知道如何才能找到问题所在。可能存在许多问题,是的,但是,某人(显然不是您自己)在这方面有丰富的经验(使用旧的 COM 库)并且遇到了这个确切的问题。如果你不能帮助我,为什么要浪费你自己的时间来评论。附言。那是修辞。
标签: c# c++ winforms dynamic com