用于C库的c#包装类

本文关键字:包装类 库的 用于 | 更新日期: 2023-09-27 18:01:34

我想在WiringPi C库中使用mcp23017.c中的函数创建一个c#包装器类。我把这个现有的c# WiringPi WrapperClass用于其他功能。我想扩展这个包装器类以使用mcp23017的函数。我尝试在包装器中创建一个具有一个函数的新类:

public class mcp23017
{
    [DllImport("libmcp23017.so", EntryPoint = "myPinMode")]
    public static extern void myPinMode(struct wiringPiNodeStruct *node,Int32 pin, Int32 mode);
}

但是我得到了struct元素的这些错误。

) expected.
; expected.
{ expected.
} expected.
Invalid token "*" in class struct or interface member declaration

我必须在包装器类中定义一个结构吗?它是如何工作的?不熟悉这个,因为我是使用c#的新手。

用于C库的c#包装类

在c#中对参数使用struct是无效的。编组程序应该为您处理这种行为。也许你是这个意思。

[StructLayout(LayoutKind.Sequential)]
public struct WiringNode
{
    //Struct members here
}
[DllImport("libmcp23017.so", EntryPoint = "myPinMode")]
public static extern void myPinMode(ref WiringNode node, Int32 pin, Int32 mode);

则称为:

var myStruct = new WiringStruct();
//Set struct members
myPinMode(ref myStruct, whatever, whatever);