我需要调用从dll导入的c函数。我可以找到如何导入api函数,但我不确定如何编组函数期望作为参数的所有类型。特别是指针类型。
示例函数签名可能是......
Result_Type get_signal_value(SIG * sig,char * name,int * value);
其中SIG是包含各种项目的结构。例如。 struct SIG { char sig_id [16]; int sig_ptr; HW_ADDR_TYPE hw_info; };
和
struct HW_ADDRESS_TYPE { short channel_no; unsigned char chassis; unsigned char槽; unsigned char链接; unsigned char filler; };
我可以发现,对于Marshal这种类型我需要描述结构布局......
[StructLayout(LayoutKind.Sequential)] 公共类HW_ADDRESS_TYPE { short channel_no; 字节机箱; 字节槽; 字节链接; 字节填充; };
[StructLayout(LayoutKind.Sequential)] 公共课SIG { public const int LEN_SID = 16; [MarshalAs(UnmanagedType.ByValTStr,SizeConst = LEN_SID)] public string sig_id; int sig_ptr; HW_ADDRESS_TYPE hw_info; };
但似乎有问题。我这样做了吗?
示例中的int *相同。
任何帮助都会很棒。干杯!
答案 0 :(得分:0)
[StructLayout(LayoutKind.Sequential)]
struct SIG
{
// describe the fields here
}
[DllImport("lib.dll")]
static extern bool get_signal_value(SIG sig, string name, float value);
您可以致电:
SIG sig = new SIG();
sig.Field1 = value1;
sig.Field2 = value2;
bool result = get_signal_value(sig, "abc", 1.5f);