从外部静态库访问函数

时间:2012-05-21 19:49:34

标签: c++ static external

我是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'错误消息的未定义引用。

有人可以向我展示或给我一些提示或帮助,说明如何正确访问这些功能及其在外部静态库中的用法?谢谢。

1 个答案:

答案 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;
}