C++
#ifdef EXPORT_ExportDllII
#define EXPORT_ExportDllII_API __declspec(dllexport)
#else
#define EXPORT_ExportDllII_API __declspec(dllimport)
#endif
#pragma pack(1)//结构1字节对齐
typedef struct BasicData
{
UINT32 u32Index;
char Dscp[4];
char VlanPriority[8];
char TTL[4];
char Time[32];
char SrcAddr[20];
char DesAddr[20];
char ProtocolType[16];
char info[100];
UINT32 U32PacketLen;
}BasicData;
#pragma pack()
typedef void(__stdcall *GetOneLineDataPtr)(BasicData DtBasic);
extern "C" EXPORT_ExportDllII_API bool QueryDtBasic(GetOneLineDataPtr fHandlerFunc);
C#
public class dllinterface
{
[DllImport(@"ExportDll.dll", CharSet = CharSet.Unicode)]
public static extern void QueryDtBasic(GetOneLineDataPtr f);
}
public delegate void GetOneLineDataPtr(BasicData oneData);
//回调函数的数据结构体
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1)]
public unsafe struct BasicData
{
public uint u32Index;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
public string u32Dscp;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
public string u32VlanPriority;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4)]
public string u32TTL;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
public string u64Time;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public string u32SrcAddr;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 20)]
public string u32DesAddr;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)]
public string u32ProtocolType;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
public string info;
public uint u32Length;
}
GetOneLineDataPtr pOneLineData = new GetOneLineDataPtr(GetOneLineData);
dllinterface.QueryDtBasic(pOneLineData);