我有一个COM组件。我在我的32位XP机器上使用regsvr32注册了它。现在,当我尝试在我的CONSOLE应用程序中实例化一个类时,应用程序就会终止,而不会给出任何异常。有什么建议??
COM dll是ABCServer.dll。代码失败,
try
{
ILookUp LP = new LookUp();
ABCServer Svr = LP.LookUpServer(hostname, port);
}
catch(Exception ex)
{
Console.WriteLine(ex.message);
}
控件永远不会到达第2行,而当我在第1行点击F10进行调试时,应用程序就会终止
答案 0 :(得分:2)
COM代码可能由于某种原因(或COM DLL的实现语言中的等效项)调用C / C ++ abort()
。由于COM服务器正在进行中,因此会立即终止整个过程。
请注意,C ++异常无法通过COM边界(它们必须通过ISupportErrorInfo
显式“封送”)。如果COM DLL中引发异常但COM DLL实现代码未正确捕获和处理,则可能导致abort()
被调用。
如果您有COM DLL的调试信息,您可以尝试启用非托管代码调试(从项目属性的“调试”选项卡,或通过“附加到进程”对话框中的“选择”按钮)并单步执行本机COM代码以尝试诊断根本问题。