COM互操作:C#COM类包装程序引发异常

本文关键字:程序 异常 包装 互操作 C#COM COM | 更新日期: 2023-09-27 18:01:13

我在C#项目中添加了对COM类型库的引用。我看到了TlbImp创建的接口和对象类。其中一种接口方法的签名是:

string GetResString(int hr);

其对应于C++标头中定义的非托管对应项:

STDMETHOD(GetResString)(EMS_RESULT hr, /*[out,retval]*/ BSTR *pbszString);

当我使用调用上述方法时

 ITranslationObject translator = new TranslationObjectClass();
  var str = translator.GetResString(2);

我收到一个异常,消息为"MfcVSApp1.exe中0x00000000处的未处理异常:0xC0000005:读取位置0x00000000的访问冲突。">

我尝试使用p/Invoke和DLLImport手动创建包装,得到了同样的结果。

这是我第一次尝试从托管代码进行COM互操作,所以我可能遗漏了一些内容。请给我一些想法,因为我需要这个来工作。

TIA。

COM互操作:C#COM类包装程序引发异常

胡乱猜测。。。也许不是COM接口问题,而是文件路径问题?确保COM DLL使用的文件的所有相对路径都是相对于EXE的,而不是DLL的。使用COM时,它们并不总是在同一个位置。

异常具有误导性。实际的互操作没有问题。Tblmp插入的实体按预期工作。这个特殊的COM对象需要一个Initialze方法才能被调用,而不是任何其他公开的方法,而我并没有这么做。初始化COM对象后,将不再引发异常,互操作将按预期工作。感谢Hans P的小费。