2010-02-04 67 views
0

我需要调用从dll导入的c函数。我可以找到如何导入api函数,但我不确定如何编组函数期望的所有类型作为参数。特别是指针类型。如何在C中调用C dll函数时编组指针类型#

实例函数签名可能是......

RESULT_TYPE get_signal_value(SIG * SIG,字符*名称,INT *值);

其中SIG是包含各种项目的结构。例如。 struct SIG char sig_id [16]; int sig_ptr; HW_ADDR_TYPE hw_info; };

结构HW_ADDRESS_TYPE { 短channel_no; unsigned char chassis; unsigned char slot; unsigned char link; 无符号字符填充符; };

我可以发现,编组这种类型的我需要描述结构布局...

[StructLayout(LayoutKind.Sequential)] 公共类HW_ADDRESS_TYPE { 短channel_no; 字节机箱; 字节槽; 字节链接; 字节填充符; };公共类INT { 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
[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); 
+0

你可以更具体的复查。结构的布局?你是否说要编制一个指针值你不得不做什么?请参阅编辑的问题... – user226356 2010-02-04 11:58:12

+0

在C#中为'SIG'和'HW_ADDRESS_TYPE'类型尝试使用'struct'而不是'class', – 2010-02-04 14:36:41