我已经束缚了我的腰部并冒险进入Legacy Land,已经入侵,调用并编组了各种类型的野兽,我现在站在一个如此凶猛的生物面前,据我所知,这是一个令人筋疲力尽的调查我的brethern-in-武器,而不是单一的代码战士已经离开了.
这是详细信息.我试图将一个2d char数组(在c#中)传递给一个C dll(没有源代码),它必须能够对2d数组进行更改.
C结构:
typedef struct s_beast { bool fireBreathing; char entrails[30][50]; } Beast;
这是我到目前为止在C#中所拥有的,但它(错误地)是一个1d数组:
[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,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阵列,我不仅仅是对野兽的初步刺杀,还有同步更新.对于每个第二维,使用mem copy操作可能会大大加快这一点.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。