gpt4 book ai didi

c++ - 从exe和dll访问静态库中的外部变量

转载 作者:行者123 更新时间:2023-11-30 02:18:10 29 4
gpt4 key购买 nike

在我的项目中,我有一个exe、一个dll 和一个静态库。

依赖如下:

 exe -> dll -> lib
| ^
|_____________|

exe依赖dll和lib,dll依赖lib。

libfile.h

struct A {
A(int i) : x(i) {}
int x;
};
extern A* ptr;

libfile.cpp 中,我有 A* ptr = nullptr;

exefile.cpp

#include "libfile.h"
__declspec(dllimport) void foo();
int main() {
ptr = new A(10);
foo();
delete ptr;
}

dllfile.cpp

 #include "libfile.h"
__declspec(dllexport) void foo();
__declspec(dllexport) void foo() {
int a = ptr->x; //error, ptr is nullptr
}

如何在不将其作为函数参数传递的情况下从 exe 和 dll 访问 lib 中的 A* ptr?我尝试使用 dll 中的接口(interface)函数将 ptr 返回给 exe,但错误仍然存​​在。

最佳答案

如果一个 exe、DLL 或多个 DLL(或 Linux 如此)使用同一个静态库,那么它们每个都会得到该库的一个拷贝。这意味着所有全局变量和静态变量都是独立的,甚至可以是静态库的不同版本(例如,如果您更改了静态库,重新编译了 exe 而没有重新编译 DLL)。

如果您希望共享该库中的资源,则需要通过其他方式来实现。例如你可以:

  • 把静态库做成另一个DLL
  • 静态链接一切
  • 避免共享静态库中的全局变量并将所有内容作为函数参数传递

关于c++ - 从exe和dll访问静态库中的外部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52555212/

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