我已经看了又看并尝试了我能想到的或找到的建议。我仍然没有运气获得我需要的数据。
我正在使用第三方 DLL,我相信它是用 C 编写的。我需要用 C# 访问此 DLL 中的函数。在大多数情况下,除了一项功能外,我都可以使用此功能。我遇到问题的函数具有以下标题:
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 中只得到一个名称。我已经在一个小型 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。