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

我有一个具有此功能的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是无效的。 为什么?我有什么问题?我哪里错了


谢谢

我假设您使用的是c++/cli。如果是这样,则不需要使用封送处理,您可以直接传递字符串

String ^sOneCall = "this is a test";
String ^sTemp1Call = "";
String ^sTemp2Call = ""


int iReturnData = myLibraryClass-> myGetStrings(sOneCall,sTemp1Call,sTemp2Call); 
如果要在调用后获取值,则需要在.net对象周围保留PtrToStringAnsi将字符串复制到新的String^对象,因此需要将其复制回本机ptr