gpt4 book ai didi

windows - 如何控制 Windows DLL 从应用程序导入哪些符号?

转载 作者:可可西里 更新时间:2023-11-01 11:22:58 26 4
gpt4 key购买 nike

我正在尝试使用 MSVC 6(复古!)在 Windows 上构建共享库 (DLL),但我有一个特殊的链接问题需要解决。我的共享库必须访问一些全局状态,由加载应用程序控制。

大体上,我所拥有的是:

应用程序.c:

static int g_private_value;

int use_private_value() {
/* do something with g_private_value */
}

int main (...) {
return shared_library_method ();
}

共享库.c:

__declspec(dllexport) int __stdcall shared_library_method() {
use_private_value();
}

(已更新 - 我忘记了 __declspec(dllexport) int __stdcall 部分,但它在真实代码中)

如何设置 shared_library.dll 以便它导出 shared_library_method 并导入 use_private_value

请记住 A) 我通常是一名 unix 程序员,并且 B) 我在没有 Visual Studio 的情况下这样做;我们的自动化构建基础架构使用 makefile 驱动 MSVC。如果我遗漏了一些可以更容易回答问题的内容,请发表评论,我会尽快更新。

最佳答案

这实际上很难开始工作。在 Unix/Linux 上,您可以让共享对象和应用程序相互导入符号,但在 Windows 上,您不能让 DLL 从加载它的应用程序导入符号:Windows PE 可执行文件格式不支持该习惯用法。

我知道 Cygwin 项目有某种变通方法来解决这个问题,但我不认为这是微不足道的。除非您想进行大量与 PE 相关的黑客攻击,否则您可能不想去那里。

一个更简单的解决方案可能是从 DLL 中导出某种初始化方法:

typedef int (*func_ptr)();
void init_library(func_ptr func);

应用程序必须在启动时调用它,传入您要共享的函数的地址。不是很优雅,但应该没问题。

关于windows - 如何控制 Windows DLL 从应用程序导入哪些符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/247471/

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