从 c++ wrap 调用 c# 方法
Posted
技术标签:
【中文标题】从 c++ wrap 调用 c# 方法【英文标题】:Call c# method from c++ wrap 【发布时间】:2014-05-07 13:49:02 【问题描述】:我有一个具有此功能的 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”和“sTemp1Call”是无效的。 为什么?我的问题是什么?我哪里错了?
谢谢
【问题讨论】:
【参考方案1】:我假设您使用的是 c++/cli。如果是这样就不需要使用 marshal 你可以直接传递一个字符串。
String ^sOneCall = "this is a test";
String ^sTemp1Call = "";
String ^sTemp2Call = ""
int iReturnData = myLibraryClass-> myGetStrings(sOneCall,sTemp1Call,sTemp2Call);
如果您想在调用后获取值,则您的函数没有参数,您需要在 .net 对象周围保留一个 PtrToStringAnsi 将字符串复制到一个新的 String^ 对象,因此您需要将其复制回您的本机点。
【讨论】:
以上是关于从 c++ wrap 调用 c# 方法的主要内容,如果未能解决你的问题,请参考以下文章