从c++包装中调用c#方法
本文关键字:方法 调用 c++ 包装 | 更新日期: 2023-09-27 18:02:05
我有一个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。