1

に2つのパラメータを持つ関数がありますc。どちらもですchar *。そのうちの 1 つは入力で、もう 1 つは出力で、2 番目のもの (出力) に何を入力すればよいかわかりません。助けてください

 // 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マーシャリング文字列から

参照による文字列: 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 に答える