私は、考えられること、または提案されていることをすべて見て、見て、試しました。私はまだ必要なデータを取得できていません。
私はサードパーティの DLL を使用していますが、これは C で記述されていると思われます。C# でこの DLL から関数にアクセスする必要があります。ほとんどの場合、1 つの機能を除いて、これは機能しています。私が問題を抱えている機能には、次のヘッダーがあります。
uint queryNumOfServers(USHORT *NumOfServers, char ServerNames[8][16]);
C#アプリケーションで次のように宣言しています
[DllImport("client.dll", CharSet=CharSet.Ansi]
public static extern uint queryNumOfServers(ref short numberofServer, StringBuilder serverNames);
私はこれを次のように呼びます。
StringBuilder serverNames = new StringBuilder(128);
short numServers = -1;
queryNumberOfServers(ref numServers, serverNames);
問題は、numberOfServers が 4 に戻ってくるのに、serverNames で 1 つの名前しか得られないことです。上記の C 関数を小さな C プログラムでテストしました。numberOfServer = 4 が返されますが、4 つの名前も返されます。
次のことを試しましたが、成功しませんでした:
[DllImport("client.dll", CharSet=charSet.Ansi, CallingConvention = CallingConvention.StdCall)]
public static extern uint queryNumOfServers(ref short numberOfServer,[MarshalAs(UnmanagedType.LPStr)] string serverNames);
これを
string serverNames = new string('\0', 128);
queryNumOfServers(ref numServers, serverNames);
このオプションによる serverNames への変更はありません。
開発環境は Visual Studio 2008 です。