使用C / C ++ DLL头构建构建C应用程序时的语法错误C2059

时间:2015-01-07 20:35:24

标签: c++ c visual-studio dll

我试图将C ++ DLL头文件转换为C / C ++兼容头。虽然我已经掌握了大部分主要构造,但我遇到了最后一个编译器问题,我似乎无法解释。以下代码在C ++中工作正常,但是当我尝试编译只包含此文件的C应用程序时,我的头文件中的函数定义会出错。

Code.h:

typedef void *PVOID;
typedef PVOID HANDLE;
#define WINAPI  __stdcall

#ifdef LIB_EXPORTS
    #define LIB_API __declspec(dllexport)
#else
    #define LIB_API __declspec(dllimport)
#endif

struct ToolState
{
    HANDLE DriverHandle;
    HANDLE Mutex;
    int LockEnabled;
    int Type;
};

#ifdef __cplusplus
extern "C" {
#endif

(LIB_API) int SetRate(ToolState *Driver, int rate);

(LIB_API) void EnableLock(ToolState *Driver) ;

(LIB_API) int SendPacket(ToolState *Driver, unsigned char *OutBuffer, int frameSize);

//These also give me the same error:
//LIB_API WINAPI int SendPacket(ToolState *Driver, unsigned char *OutBuffer, int frameSize);
//__declspec(dllimport) WINAPI int SendPacket(ToolState *Driver, unsigned char *OutBuffer, int frameSize);

//Original C++ call that works fine with C++ but has multiple issues in C
//LIB_API int SetRate(ToolState *Driver, int rate);

#ifdef __cplusplus
}
#endif

错误:

error C2059: syntax error : 'type'
error C2059: syntax error : 'type'
error C2059: syntax error : 'type'

Google搜索尚未生成任何相关结果。以下主题很接近,但没有完全回答我的问题:

C2059 syntax error using declspec macro for one function; compiles fine without it

http://support.microsoft.com/kb/117687/en-us

为什么会出现这种语法错误?

1 个答案:

答案 0 :(得分:3)

在C中,结构不是类型,因此您必须使用struct Fooenum Bar在C ++中,您可以使用FooBar

注意:

  • 在C ++中,即使类型是类,您仍然可以使用旧语法。
  • 在C语言中,人们经常使用typedef struct Foo Foo,它允许使用与C ++相同的语法。