繁体   English   中英

从外部静态库访问函数

[英]accessing the functions from external static library

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

有人可以向我展示或给我一些提示或帮助,以了解如何从外部静态库正确访问这些函数及其用法吗? 谢谢。

尽管您对自己的工作有正确的总体思路,但是您的操作方式还是存在一些问题。

首先,由于您尝试使用extern函数,因此要使用头文件中的函数。 据我所知,只有在另一个.cpp文件中声明了函数,类,结构或全局变量的情况下,才应使用extern

由于函数是在头文件中声明的,因此不需要使用extern ,只需像已有文件一样包含文件即可。

其次,在创建可变length ,将其设置为NULL 从技术上讲,在大多数情况下, NULL仅定义为0,但仅应在声明空指针(如字符数组)时使用NULL

第三,基于Quickfind的功能签名...据我所知,Quickfind接受参数device和length,并返回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;
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM