如何调用一个从c#, Java调用时返回字符串的COM函数
How to call a COM function that returns a string when called from C#, Java
问题说明:
- 在现有的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
相关文章:
- 如何安全地从 DLL 调用返回对象
- 类对象属性是否可以调用返回属性应具有的值的方法C++?
- 从类似构造函数的调用返回模板化智能指针
- C ++ DLL导入:函数调用返回错误的结果
- 如何调用返回类方法指针的类方法
- 如何调用返回双精度或字符串并将其保存在地图上但作为对象的类的方法
- FindResource 调用返回 RCDATA 类型的文本文件的 NULL
- 如何调用返回指针数组的函数?C++
- Perl xs - 无法从方法调用返回新的自定义 C++ 对象 - 改为返回标量值
- BOOST ::线程内会成员功能调用返回unique_lock Instantiation错误
- 断言调用返回的函数的签名 &(引用)
- 对于相同的输入参数,多个函数调用返回不同的结果
- 如何调用返回后删除[]内存
- 使用二维数组调用返回结构
- C++:声明、定义和调用返回模板类对象的函数
- 调用返回数组的函数
- c++方法从c#dllimport调用返回0
- 方法调用返回空值
- 我希望计时器只在上一个调用返回或完成执行时调用代码
- 任何时间函数保证为调用返回不同的值