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

这样就可以了

相关推荐
大莲芒2 小时前
react 15-16-17-18各版本的核心区别、底层原理及演进逻辑的深度解析--react17
前端·react.js·前端框架
xy_optics2 小时前
用matlab探索卷积神经网络(Convolutional Neural Networks)-3
开发语言·matlab·cnn
独好紫罗兰2 小时前
洛谷题单3-P1720 月落乌啼算钱(斐波那契数列)-python-流程图重构
开发语言·算法·leetcode
木木黄木木4 小时前
html5炫酷3D文字效果项目开发实践
前端·3d·html5
慕容莞青4 小时前
MATLAB语言的进程管理
开发语言·后端·golang
jimin_callon4 小时前
VBA第三十八期 VBA自贡分把表格图表生成PPT
开发语言·python·powerpoint·编程·vba·deepseek
Li_Ning214 小时前
【接口重复请求】axios通过AbortController解决页面切换过快,接口重复请求问题
前端
胡八一5 小时前
Window调试 ios 的 Safari 浏览器
前端·ios·safari
Dontla5 小时前
前端页面鼠标移动监控(鼠标运动、鼠标监控)鼠标节流处理、throttle、限制触发频率(setTimeout、clearInterval)
前端·javascript
再学一点就睡5 小时前
深拷贝与浅拷贝:代码世界里的永恒与瞬间
前端·javascript