1

我有一个带有 2 个参数的函数c。他们都是char *。其中一个是输入,另一个是输出,我不知道我应该填写第二个(输出)请帮帮我

 // C
 void func1(char * i_szInput , char * o_szOutput)
 {
    printf("%s\n" ,  i_szInput );
    strcpy(o_szOutput , "Hello");
 }

 // C#
 [DllImport("Test.dll")]
 public static void func1([MarshalAs(UnmanagedType.LPStr)] string str1, 
                          [MarshalAs(UnmanagedType.LPStr)] string str2);


// .......

 string str = null;
 func1("mytest" , str);
4

2 回答 2

1

使用StringBuilder. 来自 MSDN编组字符串

String by reference:使用 StringBuilder 将字符串作为 In/Out 参数传递。

 [DllImport("Test.dll")]
 public static void func1([MarshalAs(UnmanagedType.LPStr)] String str1,
                          [MarshalAs(UnmanagedType.LPStr)] StringBuilder str2);

StringBuilder str = new StringBuilder();
func1("mytest", str);

请参阅字符串的默认封送处理:固定长度字符串缓冲区(MSDN)

于 2012-08-01T07:09:45.503 回答
0

尝试这个:

string str = String.Empty;
func1("mytest", out str);
于 2012-08-01T07:09:46.150 回答