0

実際、私は次のようにC#でC ++ dllを使用しています

私のC++コード

extern "C" __declspec(dllexport)
    char**  __stdcall hh()
{
 static char* myArray[3] = {"A1", "BB2", "CC3",};
    return myArray;
}

私のC#コード

[DllImport(@"ourdll.dll",CharSet = CharSet.Ansi,CallingConvention = CallingConvention.StdCall)]     
      public static extern IntPtr hh();
       static void Main(string[] args)
        {
            IntPtr a = hh();
            int j = 0;
            string[] s=new string[100]; //I want this to be dynamic
           do
           {
               s[j] = Marshal.PtrToStringAnsi(Marshal.ReadIntPtr(a,4*j));
               j++;
           }
           while(s[j-1] != null);
        }

hh() によって返された配列のサイズを取得できません。コード行が正しく表示されるように、配列のサイズを取得するにはどうすればよいですか?

文字列[] s=新しい文字列[100]; string[] への変更 s=new string[実際の配列の長さ];

4

2 に答える 2

3

配列のサイズも返す必要があるか (おそらく参照による変数)、またはリストに NULL ターミネータを追加することができます。NULL ターミネータを使用する場合、サイズを決定するために NULL が見つかるまで配列をループできます。

于 2012-04-11T05:16:47.767 に答える
1

PInvokeで配列の長さを知りたい場合は、Marshal.SizeOf(object)メソッドを使用できます

MSDNリンク

それはStructuresのために私のために働きます

于 2012-04-11T05:34:27.680 に答える