酒店智能门锁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` 。

这样就可以了

相关推荐
艾莉丝努力练剑11 分钟前
【LeetCode&数据结构】单链表的应用——反转链表问题、链表的中间节点问题详解
c语言·开发语言·数据结构·学习·算法·leetcode·链表
brzhang4 小时前
我操,终于有人把 AI 大佬们 PUA 程序员的套路给讲明白了!
前端·后端·架构
倔强青铜34 小时前
苦练Python第18天:Python异常处理锦囊
开发语言·python
止观止4 小时前
React虚拟DOM的进化之路
前端·react.js·前端框架·reactjs·react
goms4 小时前
前端项目集成lint-staged
前端·vue·lint-staged
谢尔登4 小时前
【React Natve】NetworkError 和 TouchableOpacity 组件
前端·react.js·前端框架
u_topian5 小时前
【个人笔记】Qt使用的一些易错问题
开发语言·笔记·qt
Lin Hsüeh-ch'in5 小时前
如何彻底禁用 Chrome 自动更新
前端·chrome
珊瑚里的鱼5 小时前
LeetCode 692题解 | 前K个高频单词
开发语言·c++·算法·leetcode·职场和发展·学习方法
AI+程序员在路上5 小时前
QTextCodec的功能及其在Qt5及Qt6中的演变
开发语言·c++·qt