2012-08-01 136 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);