如何调用一个从c#, Java调用时返回字符串的COM函数
本文关键字:调用 返回 Java 字符串 函数 COM 何调用 一个 | 更新日期: 2023-09-27 18:16:46
问题说明:
- 在现有的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++代码有问题。假设您正在使用ATL,返回字符串的一种方法是这样做:
HRESULT GetString([out,retval] BSTR* string)
{
const char* ReturnString = "A string to return";
*string = CComBSTR( ReturnString ).Detach();
return S_OK;
}
其中ReturnString可以替换为您希望返回的任何字符串
您还问了java…
必须使用JNI。你将函数声明为native,然后生成包装代码,在其中你可以访问任何你想要的,例如。net库或COM。
请看这里:http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jniexamp.html