问个关于C++的dll转换成C#的问题,使用DllImport
我有个dll(Prodave6.dll)里一个函数定义如下
int LoadConnection_ex6 (int ConNr, char* pAccessPoint, int ConTableLen,CON_TABLE_TYPE * pConTable);
其中,
typedef union {
unsigned char Mpi; // MPI/PB station address (2)
unsigned char Ip[4]; // IP address (192.168.0.1)
unsigned char Mac[6]; // MAC address (08-00-06-01-AA-BB)
} CON_ADR_TYPE;
typedef struct {
CON_ADR_TYPE Adr; // connection address
unsigned char AdrType; // Type of address: MPI/PB (1), IP (2), MAC (3)
unsigned char SlotNr; // Slot number
unsigned char RackNr; // Rack number
} CON_TABLE_TYPE;
(1)我自己写的是
[DllImport("Prodave6.dll")]
public extern static int LoadConnection_ex6(int ConNr, string pAccessPoint, int ConTableLen,ref CON_TABLE_TYPE[] pConTable);
不知道对不对,还有union 怎么转换成c#的?
(2)目前我结构体用C#写成的是:
[StructLayout(LayoutKind.Explicit)]
public struct CON_ADR_TYPE
{
[FieldOffset(0)] public System.Byte Mpi; // MPI/PB station address (2)
[FieldOffset(0)]
public Byte[] Ip; // IP address (192.168.0.1)
[FieldOffset(0)]
public Byte[] Mac; // MAC address (08-00-06-01-AA-BB)
public CON_ADR_TYPE(object ob)
{
Ip = new Byte[4];
Mac = new Byte[6];
}
}
public struct CON_TABLE_TYPE
{
public CON_ADR_TYPE Adr; // connection address
public byte AdrType; // Type of address: MPI/PB (1), IP (2), MAC (3)
public byte SlotNr; // Slot number
public byte RackNr; // Rack number
}
这个是有问题的,特别是关于CON_ADR_TYPE这个共用体的重写绝对有问题!到底要怎么写呢?