gpt4 book ai didi

c++ - 从外部静态库访问函数

转载 作者:太空宇宙 更新时间:2023-11-04 14:16:33 26 4
gpt4 key购买 nike

我是 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”错误消息的 undefined reference 。

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

最佳答案

虽然您对要尝试做的事情有正确的总体想法,但您的操作方式存在一些问题。

首先,由于您正尝试对头文件中的函数使用 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;
}

关于c++ - 从外部静态库访问函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10691647/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com