2012-08-01 82 views
1

我有一个函数,它带有2个参数c。他们都是char *。其中 一个是输入,另一个是输出和我不知道我应该怎么填第二个(输出),请帮助我发送char *到字符串c#

// 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); 
+0

你应该使用'StringBuilder' – Thomas 2012-08-01 07:06:14

回答

1

使用StringBuilder。来自MSDN Marshaling Strings

字符串引用:使用StringBuilder将字符串作为输入/输出参数传递。

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

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

参见Default Marshaling for Strings: Fixed-Length String Buffers(MSDN)

+0

是什么inputStr? – Mehdi 2012-08-01 07:14:38

+0

萨拉姆。我更新了我的答案。 – Ria 2012-08-01 07:23:15

+0

@Ria'[MarshalAs(UnmanagedType.LPStr),Out()] StringBuilder str2'或'[MarshalAs(UnmanagedType.LPStr)] out StringBuilder str2'?你不应该为'StringBuilder'定义一个大小吗? – Thomas 2012-08-01 07:29:11

0

试试这个:

string str = String.Empty; 
func1("mytest", out str);