请注意下方代码的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;
10 个解决方案
#1
[StructLayout(LayoutKind.Sequential)]
class TDeviceList
{
public int dwNodeCount;
public IntPtr ptNodeInfo;
}
[DllImport(...)]
extern static int apiGetStationList(int lLoginID, ref TDeviceList pptStationList);
class TDeviceList
{
public int dwNodeCount;
public IntPtr ptNodeInfo;
}
[DllImport(...)]
extern static int apiGetStationList(int lLoginID, ref TDeviceList pptStationList);
#2
自己构造一个链表的TDeviceNodeInfo
#3
楼主贴出的代码是C++的,是dll里面的?
#4
long DLLAPI apiGetStationList(long lLoginID, TDeviceList **pptStationList); 这个是dll提供的一个函数。
TDeviceList、TDeviceNodeInfo 是dll会用到的两个结构体。
我是要写一个DllImport,把这个函数引出来。 就这个函数比较难,也比较具有代表性意义。
还有这个函数,也是要引出来的。
long DLLAPI apiGetCameraList(long lLoginID, TDeviceNodeInfo *ptStationNode, TDeviceList **pptCameraList);
这里头有一个*的参数也有两个*的参数。
没办法提供测试dll,因为这个dll要基于视频服务器上运行。
#5
带*的貌似是指针吧
#6
是指针,就是如何在C#中编写。
#7
用unsafe用指针最简单。
#8
C#有指针的,既然都是结构体,那么直接用指针即可
#9
#10
我用VC写成控件了,然后引出一些简单的参数
#1
[StructLayout(LayoutKind.Sequential)]
class TDeviceList
{
public int dwNodeCount;
public IntPtr ptNodeInfo;
}
[DllImport(...)]
extern static int apiGetStationList(int lLoginID, ref TDeviceList pptStationList);
class TDeviceList
{
public int dwNodeCount;
public IntPtr ptNodeInfo;
}
[DllImport(...)]
extern static int apiGetStationList(int lLoginID, ref TDeviceList pptStationList);
#2
自己构造一个链表的TDeviceNodeInfo
#3
楼主贴出的代码是C++的,是dll里面的?
#4
long DLLAPI apiGetStationList(long lLoginID, TDeviceList **pptStationList); 这个是dll提供的一个函数。
TDeviceList、TDeviceNodeInfo 是dll会用到的两个结构体。
我是要写一个DllImport,把这个函数引出来。 就这个函数比较难,也比较具有代表性意义。
还有这个函数,也是要引出来的。
long DLLAPI apiGetCameraList(long lLoginID, TDeviceNodeInfo *ptStationNode, TDeviceList **pptCameraList);
这里头有一个*的参数也有两个*的参数。
没办法提供测试dll,因为这个dll要基于视频服务器上运行。
#5
带*的貌似是指针吧
#6
是指针,就是如何在C#中编写。
#7
用unsafe用指针最简单。
#8
C#有指针的,既然都是结构体,那么直接用指针即可
#9
#10
我用VC写成控件了,然后引出一些简单的参数