C# 不屈不挠的野兽:一个2d字符数组,位于非托管dll的内部结构中
我束紧腰,冒险进入传统的土地,砍掉、召唤并驯服了各种野兽,现在我站在一个如此凶猛的生物面前,从我对我的战利品的精疲力竭的调查中可以看出,没有一个密码战士站在那里 详情如下。我试图将结构内部的2d字符数组(在c#中)传递给c dll(无源代码),该dll必须能够对2d数组进行更改 C结构: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#中得到的结果,但它(错
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]
啊……我通常不喜欢这样的问题,但见鬼,做得很好。