14 c# dll constructor struct dllimport
我使用结构传递给非托管DLL,因为 -
[StructLayout(LayoutKind.Sequential)]
public struct valTable
{
public byte type;
public byte map;
public byte spare1;
public byte spare2;
public int par;
public int min;
public byte[] name;
public valTable()
{
name = new byte[24];
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码将无法编译,因为VS 2005会抱怨"Structs不能包含显式无参数构造函数".为了将这个结构传递给我的DLL,我必须像这样传递一个struct数组valTable[] val = new valTable[281];
我想说的是,当我说new,构造函数被调用并且它创建了一个像我试图演示的字节数组,因为DLL正在寻找每个维度中大小为24的字节数组.
我怎么能做到这一点?
Jon*_*eet 20
您可以使用固定大小的缓冲区 - 我怀疑您确实想要它,以便在结构中获取"内联"数据(而不是在其他地方引用数组).
public fixed byte name[24];
Run Code Online (Sandbox Code Playgroud)
你需要将结构声明为不安全的.
请注意,任何需要调用静态方法或提供任何类型的自定义构造函数的"解决方案"都将失败,您的明确目标是能够创建这些结构的数组.
我建议写这段代码.
[StructLayout(LayoutKind.Sequential)]
public struct valTable
{
public byte type;
public byte map;
public byte spare1;
public byte spare2;
public int par;
public int min;
public byte[] name;
static public valTable Create()
{
valTable vT = new valTable();
vT.name = new byte[24];
return vT;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10466 次 |
| 最近记录: |