带**的dll函数如何DllImport到C#?还有,如何实现struct中包含struct的链表?
带**的dll函数如何DllImport到C#?还有,如何实现struct中包含struct的链表?
请注意下方代码的3个地方:
1、long DLLAPI apiGetStationList(long lLoginID,
TDeviceList **pptStationList);
2、TDeviceNodeInfo *ptNodeInfo; //这里比较理想的应该如何申明?
3、struct T_Device_Node_Info *ptNextNode; //这里好像是链表,如何申明
long DLLAPI apiGetStationList(long lLoginID, TDeviceList **pptStationList);
typedef struct T_Device_List
{
DWORD dwNodeCount;
TDeviceNodeInfo *ptNodeInfo; //这里比较理想的应该如何申明?
}TDeviceList;
typedef struct T_Device_Node_Info
{
char achType[MAX_NODEUNIT_LEN + 1];//Camera or Station
char achName[MAX_NODEUNIT_LEN + 1];//Camera(C_XXX) or Station(S_XXX)
char achRefName[MAX_REFNAME_LEN + 1];
char achIP[MAX_IPHOST_LEN + 1];
DWORD dwPort;
char achUser[MAX_USERNAME_LEN + 1];
char achPwd[MAX_HEXPWD_LEN + 1];
struct T_Device_Node_Info *ptNextNode; //这里好像是链表,如何申明
} TDeviceNodeInfo;
------解决方案--------------------[StructLayout(LayoutKind.Sequential)]
class TDeviceList
{
public int dwNodeCount;
public
IntPtr ptNodeInfo;
}
[DllImport(...)]
extern static int apiGetStationList(int lLoginID,
ref TDeviceList pptStationList);
------解决方案--------------------自己构造一个链表的TDeviceNodeInfo
------解决方案--------------------楼主贴出的代码是C++的,是dll里面的?
------解决方案--------------------带*的貌似是指针吧
------解决方案--------------------用unsafe用指针最简单。
------解决方案--------------------C#有指针的,既然都是结构体,那么直接用指针即