如何将 C++ dll 静态链接到 .NET 库(将 c++ dll 构建到网络包装器 dll 以获取一个 dll)

Posted

技术标签:

【中文标题】如何将 C++ dll 静态链接到 .NET 库(将 c++ dll 构建到网络包装器 dll 以获取一个 dll)【英文标题】:How to link statically C++ dll to .NET library (build in c++ dll to net wrapper dll to get one dll) 【发布时间】:2011-12-12 07:25:43 【问题描述】:

我有 C++ dll。比我将 .NET Wrapper 写到这个 C++ dll 中,我可以将 .NET 包装器附加到我的项目中并在其中使用 C++ 库。但现在我有两个文件:c++.dll 和 wrapper.dll。问题在于 c++.dll,有人可以替换 c++.dll 并通过 wrapper.dll 将其代码注入我的应用程序。如何将 c++.dll 嵌入到 .net 包装器中以获得一个 .net 包装器 dll?

谢谢

【问题讨论】:

那么 wrapper.dll 也可以替换。为什么一个 DLL 比恶意软件更安全? 【参考方案1】:

简单:不要。

可以将 C++ DLL 作为 resource 捆绑到 .NET 程序集中 - 但是这些恶意用户可以使用 ILDASM 或 Reflector 或其他任何东西从您的 .NET 程序集中提取资源 -或反编译您的 .NET 包装器并使用他们想要的任何代码重新编译它。

底线是,你真的是在向一棵你不能爬的树上狂吠(你可以做一些事情来劝阻人们,但如果他们真的想的话,你不会阻止他们弄乱你的应用程序)-并且以某种方式将您的 DLL 合并到一个文件中确实不会给您带来任何有意义的好处。

【讨论】:

【参考方案2】:

您可以尝试合并它们(例如使用 ILmerge),但我不确定这会有多大用处。再说一次,如果您将尽可能多的文件合并到一个文件中,那至少可以帮助您的安全性。这可能会有所帮助:http://weblogs.asp.net/ralfw/archive/2007/02/04/single-assembly-deployment-of-managed-and-unmanaged-code.aspx

希望对您有所帮助。

【讨论】:

好的。看来它必须保持原样。

以上是关于如何将 C++ dll 静态链接到 .NET 库(将 c++ dll 构建到网络包装器 dll 以获取一个 dll)的主要内容,如果未能解决你的问题,请参考以下文章

如何重新导出 CLR c++ 静态库

如何将本机 C++ 静态库链接到托管 C++ 程序集

将静态本机库链接到托管 C++ 项目会在

C++中lib 和 dll 的区别,生成以及使用详解

如何在 Visual Studio C++ 的 dll 项目中包含一个库

如何静态链接我的 MFC 扩展 DLL?