【发布时间】:2011-02-12 20:34:50
【问题描述】:
PHX Software 的 SQLite 将托管程序集 (System.Data.SQLite) 与非托管 dll(SQLite 32 位或 64 位 dll)组合到一个文件中,并设法将它们链接在一起。
我该怎么做?我是否需要将托管程序集嵌入到非托管 dll 中,反之亦然?
即。我的问题是:
- 我需要按什么顺序执行此操作?
- 我需要哪些工具或知识才能做到这一点?
- 如何(如果不同)从托管代码中的非托管 dll 链接到导出的函数?
我问这个的原因是我想构建一个托管的 zLib 包装器。我知道 .NET 中有托管类,但从经验来看,它们有点有限(而且有点愚蠢,因为它们没有进行适当的缓冲),所以我想创建自己的副本,也是因为我想学习如何做到这一点。
那么有人知道我需要做什么以及怎么做吗?
我发现了以下内容:
- How to merge several managed and unmanaged DLLs into a single DLL?
- Sample: Mixing Unmanaged C++, C++/CLI, and C# code
我会试试这个,但任何可用的其他信息也很好。
【问题讨论】:
-
在执行此操作之前要三思而后行,尤其是对于您的“核心”程序集。如果这不是您的代码的基本功能,最好使此类程序集动态加载。在其他情况下,任何使用此类程序集的人都必须执行一些额外的步骤以确保它使用正确的版本(x86 与 x64),即使他没有使用您的任何非托管代码。
System.Data.SQLite(基本功能)的示例对您来说是合理的,但在您的情况下可能不合理。
标签: dll assemblies embed unmanaged managed