【发布时间】:2011-01-13 00:46:28
【问题描述】:
我需要调用从 dll 导入的 c 函数。我可以找到如何导入 api 函数,但我不确定如何编组函数期望作为参数的所有类型。特别是指针类型。
示例函数签名可能是...
Result_Type get_signal_value(SIG* sig, char* name, int *value);
其中 SIG 是一个包含各种项目的结构。例如。 结构 SIG { 字符 sig_id[16]; int sig_ptr; HW_ADDR_TYPE hw_info; };
和
结构 HW_ADDRESS_TYPE { 短channel_no; 无符号字符底盘; 无符号字符槽; 无符号字符链接; 无符号字符填充; };
我可以发现对于Marshal这种类型我需要描述结构布局......
[StructLayout(LayoutKind.Sequential)] 公共类 HW_ADDRESS_TYPE { 短channel_no; 字节机箱; 字节槽; 字节链接; 字节填充; } ;
[StructLayout(LayoutKind.Sequential)] 公开课 SIG { 公共常量 int LEN_SID = 16; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = LEN_SID)] 公共字符串 sig_id; int sig_ptr; HW_ADDRESS_TYPE hw_info; };
但这里似乎有问题。我做对了吗?
示例中的 int* 也是如此。
任何帮助都会很棒。干杯!
【问题讨论】:
标签: marshalling