1

我是 Qt 中 C++ 编程的新手。如果您能回答任何或部分问题,那将非常有用,谢谢。

我将外部库用作静态库,因为它仅在“.lib”文件中提供。我已经通过stackoverflow网站的帮助正确链接了它。我也有与库关联的头文件。我在 main.cpp 中包含了头文件。我可以通过查看头文件来获得函数签名。我的问题是如何访问外部库中的函数?

例如,这是我尝试在 main.cpp 中使用的一个函数:

==> QRETURN 快速查找(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”错误消息的未定义引用。

有人可以告诉我或给我一些关于如何正确访问函数及其从外部静态库中的用法的提示或帮助吗?谢谢你。

4

1 回答 1

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;
} 
于 2012-05-21T20:33:08.793 回答