|
你好,下面我来描述下从打开设备GPS通道,一直到获取GPS数据,调用SDK的过程。打开设备GPS通道的C#接口在 BVCULibraryLayer.cs 文件中,其接口声明如下
[DllImport("ManagedLayer.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern int ManagedLayer_CuOpenGpsDialog(IntPtr handle, ref IntPtr dialog, IntPtr session,
Byte[] puId, int channelNo,
EventHandler.BVCU_GpsDialog_OnEvent onDlgEvent,
EventHandler.BVCU_GpsDialog_OnData onDlgData);
这个接口是个异步的接口,
handle是bvsdk的句柄
dialog是打开的GPS通道的句柄(用于上层操作该通道)
session是登录实例的句柄
puId 是设备ID
channelNO是通道号
onDlgEvent是一个函数指针,标识一个函数。在通道打开有结果的时候(打开成功/失败),该函数会被调用。
onDlgData也是一个函数指针,标识一个函数。在通道打开成功,并且有GPS数据的时候,该函数会被调用。
C#层 在onDlgData指向的函数中,可以接受到GPS数据。onDlgData回调上来的数据,是指向一个C结构体的指针,需要调用C#的相关接口装换。
转换函数如下:
public void onGetGpsData(string puId, IntPtr pGpsData, Int32 len)
{
BVCU_PUCFG_GPSData gpsdata = (BVCU_PUCFG_GPSData)Marshal.PtrToStructure(pGpsData, typeof(BVCU_PUCFG_GPSData));
}
}
请务必在回调函数中执行装换,不要在invoke到主线程之后再转换,数据在回调函数结束后就会清掉。
详情请参考,WinFormDemo.sln
|
|