我有一个带有一些复杂结构的 C dll,我确实是 C# 的新手:
typedef struct {
int a;
int b;
} simple_struct;
typedef struct {
int d;
int e;
simple_struct f[20];
short g;
simple_struct h[20];
short i;
} complex_struct;
问题是我无法将我的 C# 应用程序与此结构连接!!
在 DLL 中有一个函数 GetData(complex_struct* myStruct),我应该从 C# 调用它,所以我创建了:
[StructLayout(LayoutKind.Sequential, Pack = 1)]
unsafe struct simple_struct {
public int a;
public int b;
} ;
[StructLayout(LayoutKind.Sequential, Pack = 1)]
unsafe struct complex_struct {
public int d;
public int e;
public simple_struct[] f;
public short g;
public simple_struct[] h;
public short i;
} ;
但问题是,当我传递complex_struct作为GetData的参数时,所有字段都被我填回,但不是我的两个simple_struct数组(我的意思是f和h)!他们的值是空的!
有人可以帮我吗,谢谢
您好,感谢您的回复,
我已经按照你所说的做了,但是当我调用 GetData 时,我仍然遇到另一个问题,进程崩溃而没有任何消息(一种异常):
这是我的 C 锐代码:
命名空间 dll_test_import_c_sharp
{
班级计划
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
结构简单_结构{
公共整数a;
公共 int b;
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct complex_struct {
public int d;
public int e;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public simple_struct[] f;
public short g;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public simple_struct[] h;
public short i;
} ;
[DllImport("test_dll.dll", CharSet = CharSet.Unicode)]
static extern int GetData(ref complex_struct a);
static void Main(string[] args)
{
complex_struct a = new complex_struct();
GetData(ref a);
return;
}
}
}
我已经做了很多 printf i GetData 并且所有这些都执行得很好,看起来“返回”指令崩溃了!
我尝试通过 ref 或 out 调用 GetData,但它们都不起作用......
您好,感谢您的回复,
我已经按照你所说的做了,但是当我调用 GetData 时,我仍然遇到另一个问题,进程崩溃而没有任何消息(一种异常):
这是我的 C 锐代码:
命名空间 dll_test_import_c_sharp
{
班级计划
{
[StructLayout(LayoutKind.Sequential, Pack = 1)]
结构简单_结构{
公共整数a;
公共 int b;
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct complex_struct {
public int d;
public int e;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public simple_struct[] f;
public short g;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public simple_struct[] h;
public short i;
} ;
[DllImport("test_dll.dll", CharSet = CharSet.Unicode)]
static extern int GetData(ref complex_struct a);
static void Main(string[] args)
{
complex_struct a = new complex_struct();
GetData(ref a);
return;
}
}
}
我已经做了很多 printf i GetData 并且所有这些都执行得很好,看起来“返回”指令崩溃了!
我尝试通过 ref 或 out 调用 GetData,但它们都不起作用......