描述

我在调用台达电机的API时,编译工程失败,在官方提供的"AdvMotApi.h"文件报了下面两种错误

expected ';' after top level declarator”
expected initializer before 'Acm_DevOpen'

错误报了2000多个,'Acm_DevOpen’是很多函数的名字,我这里只列了一个举例

解决方案

阅读代码时,我发现可能是下面代码造成的

#ifndef  ADVCMNAPI
#if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
#define ADVCMNAPI      __stdcall
#endif
#endif

因为在之后定义的函数,都是类似于这样的构造

U32 ADVCMNAPI Acm_DevOpen(U32 DeviceNumber, PHAND DeviceHandle);

我觉得是没有进入#if段落,导致ADVCMNAPI没有被定义。但原因我暂时不清楚。我简单的在#endif后添加了定义,也就是将define那句复制到了endif后,确保这个变量被定义。

#ifndef  ADVCMNAPI
#if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
#define ADVCMNAPI      __stdcall
#endif
#endif
#define ADVCMNAPI      __stdcall  // 新添加

问题得到了解决

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐