如何将非托管dll和托管程序集合并到一个文件中?

时间:2010-04-27 12:52:27

标签: dll assemblies embed unmanaged managed

来自PHX Software的SQLite将托管程序集(System.Data.SQLite)与非托管dll(SQLite 32位或64位dll)合并为一个文件,并设法将它们链接在一起。

我该怎么做?我是否需要将托管程序集嵌入到非托管dll中,反之亦然?

即。我的问题是:

  1. 我需要以哪种顺序执行此操作?
  2. 为了做到这一点,我需要哪些工具或知识?
  3. 如何(如果不同)从托管代码中的非托管dll链接到导出的函数?
  4. 我问这个的原因是我想构建一个托管的zLib包装器。我知道.NET中有托管类,但从经验来看它们有点受限(并且有点愚蠢,因为它们没有做适当的缓冲),所以我想创建自己的副本,也因为我想要学习如何做到这一点。

    所以有人知道我需要做什么以及如何做?

    我发现了以下内容:

    我打算尝试这个,但是任何其他可用信息都会很好。

2 个答案:

答案 0 :(得分:0)

您是否尝试在System.Data.SQLite上运行反射器以了解它们是如何做到的?

我想你可以:

  • 在托管程序集中包含32位和64位dll作为资源
  • 根据某处的位数提取正确的
  • 如有必要,通过PInvoke调用SetDllDirectory(),以便windows可以找到提取的dll
  • 实例化一个32或64位托管包装类,它引用了dll

但是因为zlib在C中,你还可以使用zlib源在C ++实现的CLR程序集中包装所需的调用。 但是我不确定在那种情况下你会如何处理比特。

答案 1 :(得分:0)

sqlite查找mergebin它应该是你要找的东西。

它可以合并托管和非托管程序集。

对于使用here

,MS似乎也有一些说法