在 C# 中调用 C dll 函数时如何封送指针类型
我需要调用从 dll 导入的 ac 函数。我可以找到如何导入 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 { 短通道号; 未签名的字符底盘; 无符号字符槽; 无符号字符链接; 无符号字符填充符; };
我可以发现,要编组这种类型,我需要描述结构布局...
[StructLayout(LayoutKind.Sequential)] 公共类 HW_ADDRESS_TYPE { 短通道号; 字节机箱; 字节槽; 字节链接; 字节填充符; };
[StructLayout(LayoutKind.Sequential)] 公开课SIG { 公共常量 LEN_SID = 16; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = LEN_SID)] 公共字符串 sig_id; int sig_ptr; HW_ADDRESS_TYPE hw_info; };
但这里似乎有问题。我这样做正确吗?
示例中的 int* 也是如此。
任何帮助都会很棒。干杯!
I need to call a c function imported from a dll. I can find how to import the api function but I am unsure how to marshal all the types the function expects as paramters. Particularly pointer types.
Example function signature might be...
Result_Type get_signal_value( SIG* sig, char* name, int *value );
where SIG is a sturcture containing various items. eg.
struct SIG
{
char sig_id[16];
int sig_ptr;
HW_ADDR_TYPE hw_info;
};
and
struct HW_ADDRESS_TYPE
{
short channel_no;
unsigned char chassis;
unsigned char slot;
unsigned char link;
unsigned char filler;
};
I can find that to Marshal this type I need to describe the structure layout...
[StructLayout(LayoutKind.Sequential)]
public class HW_ADDRESS_TYPE
{
short channel_no;
byte chassis;
byte slot;
byte link;
byte filler;
} ;
[StructLayout(LayoutKind.Sequential)]
public class 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;
};
but seem to have problems here. have I done this correctly?
Same for the int* in the example.
Any help would be great. Cheers!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你可能会这样称呼:
Which you might call: