27

我们有一个由 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 从一个项目中生成两个输出
4

4 回答 4

7

在 dll 的 C++ 项目文件中,创建两个配置,一个生成 DLL,一个生成 .lib。两个项目不是必需的,因为任何 .NET/C++ 项目都可以支持多个构建配置(这就是 Release 和 Debug 版本构建不同的方式)。

于 2009-11-04T20:13:56.823 回答
6

Another option is to have two projects, one project will output a .lib which can be statically linked, and a second project which will output a .dll and will have your .lib as dependency, you should add .def to your .dll with the symbols that you are planning to export, or else it will be empty.

于 2009-01-10T23:16:38.503 回答
5

拿起一份DLL 到 Lib的副本(编辑:如果你找不到更便宜的选择)

于 2009-01-08T12:11:48.700 回答
1

您可以使用 生成一个 dll 并将入口点导出到一个库dllexport,这里对此进行了解释

http://msdn.microsoft.com/en-us/library/3y1sfaz2.aspx

于 2014-11-14T18:07:52.993 回答