我是Qt中C ++编程的新手。如果您能回答任何或部分问题,那将是非常有益的,谢谢。
我使用外部库作为静态,因为它仅在“.lib”文件中提供。我已经通过stackoverflow网站的帮助正确链接了它。我还有与库关联的头文件。我在main.cpp中包含了头文件。我可以通过查看头文件来获取函数签名。我的问题是如何从外部库访问函数?
例如,这是我尝试在main.cpp中使用的单个函数:
==> QRETURN Quickfind(char * device,unsigned long length);
int main (int argc, char *argv[]{
// I have declared like this by copying the exact function signature with added extern
extern QRETURN Quickfind(char *device, unsigned long length);
cout << device << " and " << length << endl;
} 但是,这将显示在此范围内未声明设备和长度的错误。 所以,我通过在函数之前声明参数来修改:
int main (int argc, char *argv[]{
char *device = NULL;
unsigned long length = NULL;
extern QRETURN Quickfind(char *device, unsigned long length);
cout << device << " and " << length << endl;
} 我希望将这两个参数传递给函数,但显然他们没有。另外,如果我在声明后直接使用该函数:
int main (int argc, char *argv[]{
char *device = NULL;
unsigned long length = NULL;
extern QRETURN Quickfind(char *device, unsigned long length);
Quickfind(*device, length);
cout << device << " and " << length << endl;
} 这将给出我对'Quickfind @ 8'错误消息的未定义引用。
有人可以向我展示或给我一些提示或帮助,说明如何正确访问这些功能及其在外部静态库中的用法?谢谢。
答案 0 :(得分:0)
虽然你对自己想要做的事情有正确的总体思路,但你的做法存在一些问题。
首先,因为您尝试使用extern
函数,因为您的头文件中的函数。据我所知,extern
只应在具有在另一个.cpp文件中声明的函数,类,结构或全局变量时使用。
由于您的函数是在头文件中声明的,因此您不需要使用extern
,只需包含您已有的文件。
其次,当您创建变量length
时,您将其设置为NULL
;虽然从技术上讲,在大多数情况下,NULL
只定义为0,但在声明空指针时(例如字符数组),只应使用NULL
。
第三,基于Quickfind的功能签名...据我所知,Quickfind接受参数设备和长度,并返回QRETURN。我不知道Quickfind究竟做了什么,但我猜它不会给你一个设备名称,也不会给你一个长度。
它可能会给你一个名字,但如果确实如此,你必须先创建一个数组,然后输入名称。
我不知道发生了什么,但请试试这个:
#include <your header file> or "your header file"
int main (int argc, char *argv[]{
char *device = new char[100];
unsigned long length = 100;
Quickfind(device, length);
cout << device << " and " << length << endl;
}