c# – 不屈不挠的野兽:一个2d char数组,在一个结构内,在一个非托管dll的腹部

c# – 不屈不挠的野兽:一个2d char数组,在一个结构内,在一个非托管dll的腹部,第1张

概述我已经束缚了我的腰部并冒险进入Legacy Land,已经入侵,调用并编组了各种类型的野兽,我现在站在一个如此凶猛的生物面前,据我所知,这是一个令人筋疲力尽的调查我的brethern-in-武器,而不是单一的代码战士已经离开了. 这是详细信息.我试图将一个2d char数组(在c#中)传递给一个C dll(没有源代码),它必须能够对2d数组进行更改. C结构: typedef struct s_b 我已经束缚了我的腰部并冒险进入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 *** 作可能会大大加快这一点.

总结

以上是内存溢出为你收集整理的c# – 不屈不挠的野兽:一个2d char数组,在一个结构内,在一个非托管dll的腹部全部内容,希望文章能够帮你解决c# – 不屈不挠的野兽:一个2d char数组,在一个结构内,在一个非托管dll的腹部所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1229118.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存