我束紧腰,冒险进入了遗产之地,砍倒、召唤并集结了各种野兽,现在我站在了一个如此凶猛的生物面前,据我对我的弟兄们进行的详尽调查来看,我现在所面对的生物是如此凶猛——武器中,没有一个代码战士能够幸存。
以下是详细信息。我试图将结构内部的二维字符数组(在 C# 中)传递给 C dll(无源代码),它必须能够对二维数组进行更改。
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;
}
谁愿意出手一搏,为了我,为了我的兄弟,为了子孙后代,一劳永逸地杀死这只野兽?
Interop 不是我的强项,但 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;
}
}
免责声明:内存中未经测试的代码,但它应该给出一些想法。这可以缓存 2D 数组,我不只是作为对野兽的初步尝试,还可以同步更新。通过每个第二维的内存复制操作,这可能会大大加快。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)