有束紧腰我和冒险进入传统的土地,其砍死,对调用和编组每一种类型的野兽,我现在面前的生物如此激烈忍受的,据我可以从我的辛苦调查brethern-IN-告诉武器,不是一个单一的代码战士已经罚站。
下面是详细信息。 我试图通过一个二维字符数组(在C#),在结构内部,一个C DLL(没有源代码),它必须能够进行更改2D阵列。
C语言结构:
typedef struct s_beast
{
bool fireBreathing;
char entrails[30][50];
} Beast;
以下是我迄今为止在C#中,但它(错误地)一维数组:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct Beast
{
public BOOL fireBreathing;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 30 )]
public char [] entrails;
}
谁愿意花刺在这一点,为了我的缘故,我的brethern的缘故,又为子孙后代着想,一劳永逸杀死这个庞然大物?
互操作是不是我的套房,但是C风格的多维度阵列基本上只是在单维数组句法差异。
这样的事情可能工作:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct Beast
{
public BOOL fireBreathing;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 1500 )] /* 50x30 */
public char [] entrails;
}
public class TamedBeast
{
public Beast WildBeast;
public char[30][50] entrails
{
var 2dEntrails = new char[30][50];
var position = 0;
for (int first = 0; first <30; first++)
{
for (int second = 0; second <50; second++)
{
2dEntrails[first][second] = WildBeast.entrails[position++];
}
}
return 2dEntrails;
}
}
免责声明:从内存中未测试的代码,但它应该给一些想法。 这可能缓存二维数组,我不只是作为兽初始刺,再加上同步更新。 这可以用MEM复制操作每个第二维可能大大加快。
文章来源: Indomitable beast: a 2d char array, inside a structure, in the belly of an unmanaged dll