日期:2014-05-16  浏览次数:20909 次

带**的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#有指针的,既然都是结构体,那么直接用指针即