问题陈述:
直到现在,我已经尝试了以下变化:
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
或类似的措辞异常。
我是否在正确的轨道上?或者是否存在一些编组限制导致异常被引发(比如进行内存管理等)?我无法在网上找到关于哪种方法最适合上述情况的明确解释,因此请求帮助。
进一步的计划是,将从Java应用程序调用此COM函数。
注意:请忽略函数语法,可能包含错误。 COM中实现的代码在C ++ COM库中从两个变量调用时都没有任何问题,但如上所述C#失败。
答案 0 :(得分:3)
我怀疑您的C ++代码存在问题。假设你正在使用ATL,一种返回字符串的方法就是这样做:
HRESULT GetString([out,retval] BSTR* string)
{
const char* ReturnString = "A string to return";
*string = CComBSTR( ReturnString ).Detach();
return S_OK;
}
其中ReturnString可以替换为您想要返回的任何字符串。
答案 1 :(得分:0)
您还询问了java ...
你必须使用JNI。您将这些函数声明为 native ,然后生成包装代码,在其中您可以访问您想要的任何内容,例如: .NET库或COM。
看看这里: http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jniexamp.html