【发布时间】:2023-03-14 10:10:01
【问题描述】:
问题陈述:
- 向现有的 COM 库添加一个返回字符串的函数。
- C# 应用程序使用 COM 互操作版本使用 COM 库(使用 tblimp 生成的 .net 运行时程序集)
到目前为止,我已经尝试了以下变体:
C++ 端代码:
变体 1:HRESULT GetString([out] BSTR* string);
变体 2:HRESULT GetString([out,retval] BSTR* string);
C# 端代码:
string str;
变体 1:GetString(out str);
变体 2:str = GetString();
但是两者都会引发Attempt to read/write memory 或类似措辞的异常。
我在正确的轨道上吗?或者是否有一些编组限制导致引发异常(例如在进行内存管理时等)?我无法在网上找到关于哪种方法最适合上述情况的明确解释,因此请寻求帮助。
更进一步的计划是这个 COM 函数将从 Java 应用程序中调用。
注意:请忽略函数语法,可能包含错误。当从 C++ COM 库中调用这两种变体时,COM 中实现的代码可以正常工作,但对于 C# 则失败,如上所述。
【问题讨论】:
-
你的C++代码错了,从这里看不到。
-
什么意思?我不担心语法,而是这里的方法。
标签: c# c++ com com-interop