【发布时间】:2010-09-30 06:09:31
【问题描述】:
我们有一个由 VS 构建的(纯原生 C++).DLL。作为客户端,我们有一些本地 C++ 应用程序和一个围绕这个用 C++/CLI 编写的 DLL 的 .Net-Wrapper。最后还有一些用 C# 编写的 .Net-Wrapper 客户端应用程序。
我的问题是,native.dll 的分发方式必须与 .Net 世界的工作方式不同,并且 VS 不会跟踪该 DLL。 因此,为了让我的所有 C# 应用程序正常工作,我必须将其复制到每个可执行目录或将其放在 %PATH% 中的某个位置(我会避免在开发人员计算机上这样做,因为他们可能希望使用不同版本的 DLL 启动不同的应用程序)。 如果有引用 Wrapper-DLL 的 UserControl 会出现更大的问题:您必须将 DLL 复制到 VS 的目录或再次复制到 %PATH%。 但最坏的情况发生在我们的翻译工具上。该工具跟踪 .Net-Assemblies 并将它们打包到可以发送给外部翻译器的翻译器包中。据我所知,没有办法将本机 .DLL 放入该包中!
所以我计划将本机 DLL 静态链接到 .Net-Wrapper 中,这将解决我的问题。 但是对于我们的原生应用程序,这个原生 DLL 必须仍然是一个 DLL。
所以我有两个选择:
- 为此制作两个项目(一个生成静态库;一个创建动态库 => 我尽量避免这种情况)
- 找到静态链接 DLL 的解决方案
- 想办法让 VS 从一个项目中生成两个输出
【问题讨论】:
-
我在这里可能有点傻,但我不明白为什么你的原生应用程序不能使用原生 dll,而你的 .net 应用程序使用 c++/cli 包装的 dll。
-
两者都可以。但是 Wrapper-DLL 引用了本机 DLL,因此我的 C# 应用程序两者都需要。这对于包装器来说是可以的,但对于本机 DLL 来说是痛苦的。
-
为什么不为 dll 构建一个库?你说你用VS构建dll,不是吗?
-
这将如何在 Visual Studio 2019 中完成? stackoverflow.com/questions/67097557/…
标签: c++ dll linker static-linking