我对使用外部库有点新意,请耐心等待。
当我尝试使用某些SDK中的函数SetCommType
时出现错误。
我添加了标题,链接到lib
,dll
也可以在运行时使用。
这是错误:
"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
,我就会收到此错误。
答案 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
文件中。