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

这样就可以了

相关推荐
程序员码歌5 小时前
短思考第261天,浪费时间的十个低效行为,看看你中了几个?
前端·ai编程
咖啡の猫5 小时前
Python字典推导式
开发语言·python
Swift社区5 小时前
React Navigation 生命周期完整心智模型
前端·react.js·前端框架
若梦plus6 小时前
从微信公众号&小程序的SDK剖析JSBridge
前端
leiming66 小时前
C++ vector容器
开发语言·c++·算法
SystickInt6 小时前
C语言 strcpy和memcpy 异同/区别
c语言·开发语言
用泥种荷花6 小时前
Python环境安装
前端
CS Beginner6 小时前
【C语言】windows下编译mingw版本的glew库
c语言·开发语言·windows
Light606 小时前
性能提升 60%:前端性能优化终极指南
前端·性能优化·图片压缩·渲染优化·按需拆包·边缘缓存·ai 自动化
Jimmy6 小时前
年终总结 - 2025 故事集
前端·后端·程序员