解决Matlab2022a用mex编译产生乱码提示的问题

一个以前用得好好的DeviceQuery.mexw64程序,在Matlab2022a里就不能运行了。提示信息是:

        “MEX 文件 'E:\Temp\DeviceQuery.mexw64' 无效: 找不到指定的模块。”

文件在正确的路径里,但Matlab就是不认。操作系统是Windows10。查了些文章,说要重新编译才能在这个版本的Matlab里用。

用mex重新编译C++文件的时候,又出了新的问题,报了一个错误,有些乱码方块在里面,估计是中文。

E:\Temp\Matlab\DeviceQuery.cpp(111): error C2664: ��int MultiByteToWideChar(UINT,DWORD,LPCCH,int,LPWSTR,int)��:
�޷������� 5 �ӡ�mxChar *��ת��Ϊ��LPWSTR��

这是编译器的错误提示信息,为了搞清楚提示是什么内容,就要让Matlab正确显示这些字符。估计问题在于UTF编码与GBK编码不兼容。首先用feature('locale')命令,看Matlab的编码,显示如下:

feature('locale')

ans = 

  包含以下字段的 struct:

               ctype: 'zh_CN.UTF-8'
             collate: 'zh_CN.UTF-8'
                time: 'zh_CN.UTF-8'
             numeric: 'en_US_POSIX.UTF-8'
            monetary: 'zh_CN.UTF-8'
            messages: 'zh_CN.UTF-8'
            encoding: 'UTF-8'
    terminalEncoding: 'GBK'
         jvmEncoding: 'UTF-8'
              status: 'MathWorks locale management system initialized.'
             warning: ''

果然Matlab的编码是UTF-8,而不是GBK。MATLAB读取区域设置只是跟Windows系统区域中的“格式(Format)”设置有关,但试了很多办法,都不能让UTF-8转成GBK编码。最后,只好转个思路,让中文编码不用GBK,而是改用用UTF格式。在系统区域设置中的核选框打勾,如下图,然后重启系统。

  再用mex编译时,错误信息终于显示出来了:

E:\Temp\DeviceQuery.cpp(107): error C2664: “int MultiByteToWideChar(UINT,DWORD,LPCCH,int,LPWSTR,int)”: 无法将
参数 5 从“mxChar *”转换为“LPWSTR”

这是新版的Matlab重新定义了mxChar,强制类型转换后,编译顺利通过。执行程序,一切正常。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值