使用C#中的编组从C中获取字符串数组

时间:2012-07-19 06:24:29

标签: c# .net c marshalling

我的c代码就像

void GetCharArray(char* arrayNew[5])
{
    arrayNew[0] = "Test";
    arrayNew[1] = "Test2";
    arrayNew[2] = "Test4";
    arrayNew[3] = "Test5";
    arrayNew[4] = "Test6";
}

extern "C" __declspec(dllexport) void GetCharArray(char* arrayNew[5]);

我希望在我的C#代码中使用字符串填充数组

[DllImport(@"C:/Test.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
public static extern void GetCharArray([MarshalAs(UnmanagedType.LPArray, SizeConst=5)] string[] sbOut);

List<string> testStr = new List<string>();
GetCharArray(test.ToArray());

我希望我的testStr填充C代码中的字符串。

3 个答案:

答案 0 :(得分:1)

找到了解决方案

public static extern void GetCharArray(IntPtr[] results);

IntPtr[] pointers = new IntPtr[1000];
GetCharArray(pointers);
string[] results = new string[1000];
for (int i = 0; i < 1000; i++)
{
    results[i] = Marshal.PtrToStringAnsi(pointers[i]);
}

我希望它可以帮助别人。

答案 1 :(得分:0)

除了你自己的回答(对不起,还不能发表评论)。

如果你有一个可变长度的数组,你可以简单地创建2个函数。

第一个只返回所需数组的长度,第二个只传递一个预定义数组,其中包含第一个函数的给定长度,就像使用1000一样。

至少我可以解决这个问题。

答案 2 :(得分:-2)

如果不讨论语法的正确性,我认为以下链接可以帮助您进一步。

http://www.dotnetperls.com/convert-char-array-string