gpt4 book ai didi

c++ - 删除对 MFC DLL 项目的外部依赖

转载 作者:行者123 更新时间:2023-11-30 04:37:25 26 4
gpt4 key购买 nike

我正在 VS2008 中开发一个 MFC DLL 项目。dll 编译正常,我可以从承包商为我开发的 GUI exe 调用它。需要为我的 dll 安装 Visual C++ Redistributables(也许还有用 C++ 开发的 exe)

另一家公司想授权我的 dll 与他们的 C++ exe 一起使用。他们要求我的 dll 没有外部依赖项。是否可以编译我的 dll 以删除所有外部依赖项,如 Visual C++ Redistributables?

设置/MT 会这样做吗?我读过Should I compile with /MD or /MT?这是有道理的,但我担心 dll hell 。

这会导致 exe 调用我的 dll 时出现问题吗?我在某处读到 exe 和 dll 需要使用相同的 Visual C++ Redistributables 或其他东西。

我对 C++ 有点陌生。任何建议表示赞赏。

最佳答案

您可以链接静态版本的 CRT(是的,/MT),但它非常危险。您必须仔细检查您的导出。确保它们都不返回 C++ 对象,即使是 std::string(或 CString)也不行。或者客户端代码必须释放的任何指针。这会出错很严重,因为客户端将拥有自己的 CRT 拷贝并使用不同的堆。这将泄漏返回的对象/指针,当安全堆管理器检测到指针不属于堆时,Vista 和 Win7 上的程序崩溃。

“外部依赖”到底是什么意思可能存在争议。对 CRT 的依赖并不完全是外部的。但是,您必须向他们提供基于他们使用的相同版本的 Visual Studio 构建的 DLL 版本。仅当版本匹配时才能共享 CRT。

关于c++ - 删除对 MFC DLL 项目的外部依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3831631/

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