MATLAB R2020b调用loadlibrary加载仪器DLL时出现语法错误
解决MATLAB R2020b加载仪器DLL时的C2059枚举语法错误
问题核心是MATLAB R2020b的loadlibrary工具默认使用的编译器不支持C++11的强类型枚举语法(即enum error_km : int32_km这种带类型指定的写法),这直接导致了第10行的C2059语法错误,另外原代码里KmSuccess行的`your text`也是无效语法,必须清理。
以下是可行的解决步骤:
修改头文件为C兼容语法
把强类型枚举改成传统C枚举,同时清理无效代码,修改后的SDK_Error.h对应部分如下:typedef signed int int32_km; //!< 32bit(signed) enum error_km { KmSuccess = 0, // The processing was completed normally. KmWarning = 1 };保存后重新调用
loadlibrary。指定编译器使用C++11标准
若不想修改头文件,可在调用loadlibrary时通过参数强制编译器启用C++11支持(以MSVC编译器为例):loadlibrary('你的DLL文件名.dll', 'SDK_Error.h', 'compilerOpts', '/std:c++11')排查其他C++特性问题
如果修改枚举后仍有错误,检查头文件中是否还有其他C++专属特性(比如命名空间、类、模板等),MATLAB的loadlibrary对纯C语法兼容性更好,建议将需要调用的接口封装成纯C风格的头文件,或者使用mex工具手动生成调用接口。
内容的提问来源于stack exchange,提问作者Lars Granlöf
相关产品推荐
相关产品推荐

