只要实现蓝牙打开关闭 搜索其他蓝牙设备,连接、配对的功能就可以了。
要能和不同mobile的操作系统的蓝牙设备连接
网上找了好久,没有源代码,都只有介绍方法的。
都是用btdrt.dll 里的方法实现的。
可是这要涉及到托管代码和非托管代码的调用的问题,
这方面的代码我看都看不懂 更别提写了。相当郁闷!
类似如下得代码:(看了久头疼)
- C# code
[DllImport(WINSOCK_DLL)] public static extern int WSALookupServiceBegin(byte[] querySet, int flags, ref int lookupHandle); [DllImport(WINSOCK_DLL)] public static extern int WSALookupServiceNext(int lookupHandle, int flags, ref int bufferLen, byte[] results); [DllImport(WINSOCK_DLL)] public static extern int WSALookupServiceEnd(int lookupHndle);byte[] buffer1 = new byte[0x400];BitConverter.GetBytes(60).CopyTo(buffer1, 0);GCHandle handle1 = GCHandle.Alloc(blob1.ToByteArray(), GCHandleType.Pinned);IntPtr ptr1 = handle1.AddrOfPinnedObject();BitConverter.GetBytes((int) (ptr1.ToInt32() + 4)).CopyTo(buffer1, 0x38);
我想请问下要掌握哪方面的知识,才能看得懂这样的代码啊?
提前表示感谢!
------解决方案--------------------
这段代码是典型的c#与WIN32底层通信的代码。 [DllImport(WINSOCK_DLL)]
这个是声明一个有C的DLL中的函数。
byte[] buffer1 = new byte[0x400];
BitConverter.GetBytes(60).CopyTo(buffer1, 0);这是把buffer1初始化
GCHandle handle1 = GCHandle.Alloc(blob1.ToByteArray(), GCHandleType.Pinned);//生命一个句柄。
IntPtr ptr1 = handle1.AddrOfPinnedObject();//得到句柄指针。
BitConverter.GetBytes((int) (ptr1.ToInt32() + 4)).CopyTo(buffer1, 0x38);//ptr1右移4位后考到buffer1