惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
J
Java Code Geeks
L
LangChain Blog
V
V2EX
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
博客园 - Franky
Microsoft Azure Blog
Microsoft Azure Blog
Jina AI
Jina AI
Blog — PlanetScale
Blog — PlanetScale
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Cloudflare Blog
博客园 - 司徒正美
B
Blog
G
Google Developers Blog
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
Engineering at Meta
Engineering at Meta
MyScale Blog
MyScale Blog
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog

博客园 - 清雷

湘江老厨聚餐 我的青春 今日感想 东莞一日游 HP MC/SG 双机安装心得 周末的狂想 汉字转拼音的例子 回忆大学 Asp.Net下的DataGrid的多层表头 设置窗体背景图片,并且让图片随着窗体的大小的调整而调整大小 VS无法调试智能设备程序的解决方案 VS.Net下的新的单元测试工具-TestDriven.NET 怀念我的大学(2) 显示主窗体前显示登陆窗口的完美解决方案 windows消息大全 在.NET 中使用WIN32 API的宝库 一个封装的异步Socket客户端 一个很好的C#题目 怀念我的大学(1)
开发.NET CF 蓝牙的通信模块
清雷 · 2005-09-09 · via 博客园 - 清雷

    最近在Windows CE.NET上要做一个蓝牙通讯模块,往网上搜索资料,发现了一篇用C# 来开发.NET CF 蓝牙的通信模块的文 章,http://it.sohu.com/20050331/n224948889.shtml,尝试着照他的思路做,才发现是如此艰难.非托管代码与托管代码之间的交互是最大的问题.这个项目也就一筹莫展.意外发现OpennetCF网站上有个蓝牙模块,我就出尝试用这个库来写,但是写的demo在我那款PDA 上不能运行,可是我这款PDA是支持微软stack的啊,问题出在哪呢?
     用Vault把OpennetCF中的关于Bluetooth模块的源代码下载下来研究一下,才发现OpennetCF中的Bluetooth中用到的本地API跟上面我找到的那篇论文中提到的API有些不一致,马上我就进行修改:

        #region 本地API代码
        
/// <summary>
        
/// 查找本地蓝牙DeviceID
        
/// </summary>
        
/// <param name="pba">本地蓝牙DeviceID</param>
        
/// <returns></returns>

        [DllImport("Btdrt.dll", SetLastError=true)]
        
public static extern int BthReadLocalAddr(byte[] pba);

        
/// <summary>
        
/// 初始化查找周围设备
        
/// </summary>
        
/// <param name="pQuerySet"></param>
        
/// <param name="dwFlags"></param>
        
/// <param name="lphLookup"></param>
        
/// <returns></returns>

        [DllImport("Btdrt.dll", SetLastError=true)]
        
public static extern int BthNsLookupServiceBegin(
            
byte[] pQuerySet,
            LookupFlags dwFlags,
            
ref int lphLookup);

        
/// <summary>
        
/// 开始查找蓝牙设备
        
/// </summary>
        
/// <param name="hLookup"></param>
        
/// <param name="dwFlags"></param>
        
/// <param name="lpdwBufferLength"></param>
        
/// <param name="pResults"></param>
        
/// <returns></returns>

        [DllImport("Btdrt.dll", SetLastError=true)]
        
public static extern int BthNsLookupServiceNext(
            
int hLookup,
            LookupFlags dwFlags,
            
ref int lpdwBufferLength,
            
byte[] pResults);

        
/// <summary>
        
/// 查找周围蓝牙设备结束
        
/// </summary>
        
/// <param name="hLookup"></param>
        
/// <returns></returns>

        [DllImport("Btdrt.dll", SetLastError=true)]
        
public static extern int BthNsLookupServiceEnd(    int hLookup);

        
/// <summary>
        
/// 获取配对码请求
        
/// </summary>
        
/// <param name="pba"></param>
        
/// <returns></returns>

        [DllImport("Btdrt.dll", SetLastError=true)]
        
public static extern int BthGetPINRequest(byte[] pba);
        
        
/// <summary>
        
/// 设置配对码
        
/// </summary>
        
/// <param name="pba"></param>
        
/// <param name="cPinLength"></param>
        
/// <param name="ppin"></param>
        
/// <returns></returns>

        [DllImport("btdrt.dll", SetLastError=true)]
        
public static extern int BthSetPIN(byte[] pba, int cPinLength, byte[] ppin);
        
        
/// <summary>
        
/// 创建ACL连接
        
/// </summary>
        
/// <param name="pbt"></param>
        
/// <param name="phandle"></param>
        
/// <returns></returns>

        [DllImport("Btdrt.dll", SetLastError=true)]
        
public static extern int BthCreateACLConnection(byte[] pbt, ref ushort phandle);
        
        
/// <summary>
        
/// 配对码验证
        
/// </summary>
        
/// <param name="pbt"></param>
        
/// <returns></returns>

        [DllImport("Btdrt.dll", SetLastError=true)]
        
public static extern int BthAuthenticate(byte[] pbt);
        
        
/// <summary>
        
/// 关闭认证连接
        
/// </summary>
        
/// <param name="handle"></param>
        
/// <returns></returns>

        [DllImport("Btdrt.dll", SetLastError=true)]
        
public static extern int BthCloseConnection(ushort handle);


        
        
//BthGetHardwareStatus

        [DllImport(
"Btdrt.dll", SetLastError=true)]
        
public static extern int BthGetHardwareStatus(ref HardwareStatus pistatus);


        
//BthRevokePin

        [DllImport(
"Btdrt.dll", SetLastError=true)]
        
public static extern int BthRevokePIN(byte[] pba);    

        [DllImport(
"ws2.dll", EntryPoint="WSAGetLastError", SetLastError=true)]
        
public static extern int CeGetLastError();

        [DllImport(
"ws2_32.dll", EntryPoint="WSAGetLastError", SetLastError=true)]
        
public static extern int XpGetLastError();

        
//SetService

        [DllImport(
"Btdrt.dll",SetLastError=true)]
        
public static extern int BthNsSetService(
            
byte[] lpqsRegInfo,
            WSAESETSERVICEOP essoperation,
            
int dwControlFlags);
        
#endregion
 

    改动相应的代码,再写Bluetooth的demo时,就能正常运行.