酒店智能门锁sdk故障解决-酒店编码不一致,房卡无法开

酒店点门锁对接过程中,提示房卡写入成功,

反向读取数据显示正常

这是因为C#编码不一致导致

C#调用非托管的.dll文件方法如下:

 [DllImport("未来之窗智能门锁.dll")  ]

        public static extern int GuestCard_原始(string 酒店编码, string 门锁编码, string 开房时间编码); 

在高版本会出错

解决方法

 [DllImport("未来之窗智能门锁.dll", EntryPoint = "GuestCard",CharSet = CharSet.Ansi,CallingConvention = CallingConvention.StdCall)  
         ]
 
        public static extern int GuestCard_原始(string 酒店编码, string 门锁编码, string 开房时间编码); 

特别注意编码,一般C写的接口都是StdCall

其中CallingConvention.就有五种方式:

CallingConvention = CallingConvention.StdCall

CallingConvention = CallingConvention.Cdecl

CallingConvention = CallingConvention.FastCall

CallingConvention = CallingConvention.ThisCall

CallingConvention = CallingConvention.Win

看看原型

#define   CALLBACK         __stdcall    
#define   WINAPI           __stdcall    
#define   WINAPIV          __cdecl    
#define   APIENTRY          WINAPI    
#define   APIPRIVATE       __stdcall    
#define   PASCAL           __stdcall

**调用约定总结** 调用约定决定了函数参数传送和栈操作的方式,主要有以下几种: 1. `__stdcall` 调用约定: - 相当于 16 位动态库中的 PASCAL 调用约定,在 32 位的 VC++5.0 中取代了 PASCAL 调用约定。 - 函数参数自右向左通过栈传递,被调用的函数在返回前清理传送参数的内存栈。 - 函数名的修饰上,VC 编译后会在函数名前面加上下划线前缀,在函数名后加上"@"和参数的字节数。例如:`_functionname@num` 。 - 常用于 Win32 Api 中。 2. `__cdecl` 调用约定: - 按从右至左的顺序压参数入栈,由调用者把参数弹出栈。 - 对于传送参数的内存栈由调用者维护,因此能实现可变参数的函数。 - 函数名修饰方面,VC 编译后会在函数名前面加上下划线前缀。 - 是 C 和 C++程序的缺省调用方式,也是 MFC 的缺省调用方式。 3. `__fastcall` 调用约定: - 主要特点是快,通过寄存器(ECX 和 EDX 传送前两个双字或更小的参数)和栈(剩下的参数自右向左压栈)传送参数。 - 被调用的函数在返回前清理传送参数的内存栈。 - 函数名修饰上,VC 编译后会在函数名前面加上"@"前缀,在函数名后加上"@"和参数的字节数。例如:`@functionname@num` 。 4. `thiscall` 调用约定: - 仅应用于"C++"成员函数,this 指针存放于 CX 寄存器,参数从右到左压。 5. `naked call` 调用约定: - 采用其他调用约定时,进入和退出函数时编译器会产生代码保存和恢复相关寄存器,而 `naked call` 不产生这样的代码。 在实际使用中,`__stdcall` 调用约定的函数由自身清栈,`__cdecl` 的函数由调用者清栈。最大的差别在于 `__cdecl` 的函数参数个数可以声明为不确定,如 `printf` 、`scanf` ;而 `__stdcall` 的函数不能这样做。 在 VC 中,`PASCAL` 、`CALLBACK` 、`WINAPI` 都等同于 `__stdcall` 。

这样就可以了

相关推荐
monstercl4 分钟前
【C#】元组
开发语言·c#
我叫czc11 分钟前
【Python高级366】静态Web服务器开发
服务器·前端·python
舒克日记16 分钟前
Java:189 基于SSM框架的在线电影评价系统
java·开发语言
温轻舟18 分钟前
前端开发 -- 自动回复机器人【附完整源码】
前端·javascript·css·机器人·html·交互·温轻舟
赵大仁18 分钟前
深入解析 Vue 3 的核心原理
前端·javascript·vue.js·react.js·ecmascript
Jelena技术达人18 分钟前
深入探索:获取翻译文本与语言词法分析的API接口
开发语言·爬虫
csstmg30 分钟前
记录一次前端绘画海报的过程及遇到的几个问题
前端
bidepanm31 分钟前
Vue.use()和Vue.component()
前端·javascript·vue.js
青青丘比特1 小时前
STL.string(下)
开发语言·c++
顾平安1 小时前
手写 PromiseA+ 实现,轻松通过 872 条用例
前端