C# C++包调用C方法
我有一个具有此功能的c库:C# C++包调用C方法,c#,c++,marshalling,wrapper,C#,C++,Marshalling,Wrapper,我有一个具有此功能的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
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是无效的。
为什么?我有什么问题?我哪里错了
谢谢我假设您使用的是c++/cli。如果是这样,则不需要使用封送处理,您可以直接传递字符串
String ^sOneCall = "this is a test";
String ^sTemp1Call = "";
String ^sTemp2Call = ""
int iReturnData = myLibraryClass-> myGetStrings(sOneCall,sTemp1Call,sTemp2Call);
如果要在调用后获取值,则需要在.net对象周围保留PtrToStringAnsi将字符串复制到新的String^对象,因此需要将其复制回本机ptr