【发布时间】:2017-08-02 12:54:18
【问题描述】:
我有一个 C++ 应用程序,它有许多静态 ibs (*.lib) 和 DLL。 我正在我的 EXE 中创建一个对象,然后我继续使用函数调用将指向该对象的指针从 1 个库传递到另一个库。
在这个过程中,当这个指针从主 EXE 移动到 DLL 的函数时,我想了解它是否有任何问题或者我需要采取任何预防措施。
带有 3 个静态库(A.lib、B.lib、C.lib)的 Main.EXE Main.EXE 还链接
带有 2 个 DLL - d1.dll、d2.dll。这些静态库和DLL中的每一个
还静态链接到静态库 X.lib。
呼叫流程:
main.EXE 中的 main() 调用 A.lib 中的 AFunc() 并将指针传递给 X.lib 中某个 X 类的对象。
现在 A.lib 中的 AFunc() 调用 B.lib 中的 BFunc() 并传递“相同的指针 到 X.lib 中的 X 类对象。
现在 B.lib 中的 BFunc() 调用 C.lib 中的 CFunc() 并传递“相同的指针 到 X.lib 中的 X 类对象。
现在 C.lib 中的 CFunc() 调用 D1.DLL 中的 D1Func() 并传递“相同 指向 X.lib 中的 X 类对象的指针。
现在 D1.DLL 中的 D1Func() 调用 D2.DLL 中的 D2Func() 并传递“相同 指向 X.lib 中的 X 类对象的指针。
我的查询是通过 C.lib(main.EXE 的一部分)中的 CFunc() 和 D1.DLL 的 D1Func() 的指针是否有效?
【问题讨论】:
-
你知道操作系统进程是如何工作的吗?加载 DLL 意味着什么?
-
应该可以。只要它们是同一进程的一部分以及在运行时加载正确的动态库,您链接哪种类型的库都没有关系。
-
进程中的所有代码(EXE、DLL 等)都有公共地址空间。并注意函数地址 - 这也是指针
-
@TheQuantumPhysicist - 我不是来拥抱任何人的。我礼貌地询问了他的知识范围。或者你认为关于虚拟内存的一整章适合作为 SO 的答案吗?