使用库中的方法

时间:2014-04-24 13:17:59

标签: c++

我对使用外部库有点新意,请耐心等待。

当我尝试使用某些SDK中的函数SetCommType时出现错误。 我添加了标题,链接到libdll也可以在运行时使用。

这是错误:

"error C2065: 'byte' : undeclared identifier"

这是(SDK)头文件,编辑器在单击错误后导航:

/*------define windows version---- */
#ifndef _WINDOWS_VERSION
#define _WINDOWS_VERSION
#endif


#ifdef _WINDOWS_VERSION
    #ifdef CV_API_EXPORT
      #define extern__stdcall extern "C" __declspec(dllexport) int __stdcall
    #else
  ->#define extern__stdcall extern "C" __declspec(dllimport) int __stdcall<-
    #endif
#else
    #define extern__stdcall extern int 
    typedef unsigned char byte;
    typedef unsigned char BYTE;
#endif




extern__stdcall SetCommType(byte aType); // here it complains

ifdef部分,除了我放置-><-的行之外的所有内容都显示为灰色,这可能就是为什么它看不到{{1} }? (以及其他错误,因此我相信)。

我不确定我做错了什么。 我在Cpp文件中包含了头文件,将lib添加到依赖项中,并且可以使用dll。 一旦我尝试使用该方法:byte,我就会收到此错误。

2 个答案:

答案 0 :(得分:0)

字节和BYTE的typedef可能不应该包含在预处理器#中,如果是这样的话,或者,标头应该包含来自另一个标头的byte / BYTE声明(它目前不是。)

如果库是您的,请通过移动typedef或在_WINDOWS_VERSION案例中添加一个将定义类型的包来解决它。

如果库不是您的,那么创建者可能希望在包含SDK标头之前包含,以便定义字节/ BYTE,最终应该包含在SDK标题。

一个好的头文件声明了使用它所需的一切,仅此而已,只要有可能就使用前向声明。

*现在我看到斜角括号使得Windows.h消失了。

答案 1 :(得分:0)

我认为SDK文件很草率。在其特定于Windows的部分中,它应具有:

#ifdef _WINDOWS_VERSION
    #include <windows.h>
    #ifdef CV_API_EXPORT
      #define extern__stdcall extern "C" __declspec(dllexport) int __stdcall
    #else
    #define extern__stdcall extern "C" __declspec(dllimport) int __stdcall
    #endif
#else
    #define extern__stdcall extern int 
    typedef unsigned char byte;
    typedef unsigned char BYTE;
#endif

要解决此问题,请添加

#include <windows.h>

在包含SDK头文件的行之前的.cc文件中。