从c++包装中调用c#方法
Call c# method from c++ wrap
我有一个c#函数库:
public static int myGetStrings(String sOne, out String sTemp1, out String sTemp2)
{
sTemp1 = sOne+"1";
sTemp2 = sOne+"2";
return 0;
}
我的c++包装调用c#库:
char sOneCall[256],sTemp1Call[256],sTemp2Call[256];
sprintf(sOneCall,"this is a test");
int iReturnData = myLibraryClass-> myGetStrings(
Marshal::PtrToStringAnsi((IntPtr) (char *)sOneCall),
Marshal::PtrToStringAnsi((IntPtr) (char *)sTemp1Call),
Marshal::PtrToStringAnsi((IntPtr) (char *)sTemp2Call) );
但是当我执行我的代码变量"sTemp1Call"answers"sTemp1Call"是无效的。为什么?我有什么问题?我哪里错了?
谢谢
我假设您正在使用c++/cli。如果是这样,就不需要使用marshal,你可以直接传递一个字符串。
String ^sOneCall = "this is a test";
String ^sTemp1Call = "";
String ^sTemp2Call = ""
int iReturnData = myLibraryClass-> myGetStrings(sOneCall,sTemp1Call,sTemp2Call);
你的函数有参数,如果你想在调用后得到值,你需要保持在。net对象周围,PtrToStringAnsi将字符串复制到一个新的String^对象,所以你需要将它复制回你的原生ptr。
相关文章:
- 如何强制从重写方法调用重写的方法基方法?
- C++:使用方法调用析构函数的顺序是什么?
- 派生类调用父类的方法,该方法调用重写的虚拟方法调用错误的方法
- 使用 object 中的方法调用带有 std::bind 和 std::function.target 的 C 样式函数
- 指向类方法调用的指针
- 如何使用 SFINAE 在方法调用中有条件地定义变量?
- 是否有可以处理方法调用依赖关系的设计模式?
- 如何缩短C++中的方法调用?
- 从部分专用模板方法调用模板非静态方法
- 有没有办法禁止派生类中的基类方法调用?
- 为什么这C++只在编译器上编码一个不明确的方法调用Microsoft?
- 从父方法调用子方法
- 如何将子方法调用到父方法
- 虚拟函数在哪里使用 vpointer to vtable 来解析方法调用,非虚拟方法存储在哪里以及如何解析它们?
- 从静态方法调用静态函数指针
- 从同一类中的另一个方法调用方法时出错
- 方法调用意外地像 l 值一样起作用
- 无法从派生的一个方法调用基类方法
- 从类方法调用命名空间中名为 Same 的函数时,重载解析失败
- C 多线程JAVA JNI方法调用