Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 不屈不挠的野兽:一个2d字符数组,位于非托管dll的内部结构中_C#_Pinvoke_Marshalling_Multidimensional Array - Fatal编程技术网

C# 不屈不挠的野兽:一个2d字符数组,位于非托管dll的内部结构中

C# 不屈不挠的野兽:一个2d字符数组,位于非托管dll的内部结构中,c#,pinvoke,marshalling,multidimensional-array,C#,Pinvoke,Marshalling,Multidimensional Array,我束紧腰,冒险进入传统的土地,砍掉、召唤并驯服了各种野兽,现在我站在一个如此凶猛的生物面前,从我对我的战利品的精疲力竭的调查中可以看出,没有一个密码战士站在那里 详情如下。我试图将结构内部的2d字符数组(在c#中)传递给c dll(无源代码),该dll必须能够对2d数组进行更改 C结构: typedef struct s_beast { bool fireBreathing; char entrails[30][50]; } Beast; 这是我目前在C#中得到的结果,但它(错

我束紧腰,冒险进入传统的土地,砍掉、召唤并驯服了各种野兽,现在我站在一个如此凶猛的生物面前,从我对我的战利品的精疲力竭的调查中可以看出,没有一个密码战士站在那里

详情如下。我试图将结构内部的2d字符数组(在c#中)传递给c dll(无源代码),该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;
}

谁愿意尝试一下,为了我,为了我的兄弟,为了后代,一劳永逸地杀死这头野兽?

互操作不是我的强项,但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;
    }
}
[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]
公共结构野兽
{
公共场所;
[Marshallas(UnmanagedType.ByValArray,SizeConst=1500)]/*50x30*/
内脏;
}
公营班车
{
公共野兽;
公共字符[30][50]内脏
{
var 2dentrals=新字符[30][50];
var位置=0;

对于(int first=0;first-Well…有什么问题吗?到目前为止您尝试了什么?
char[,]内脏不起作用?在我尝试过的许多事情中,这不是其中的一个。刚刚这么做,它编译得很好,但是我如何定义大小?
char[,]thounhallnotpass=new char[30,50]
啊……我通常不喜欢这样的问题,但见鬼,做得很好。