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

ang*_*son 7 embed dll assemblies unmanaged managed

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

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

即.我的问题是:

  1. 我需要以哪种顺序执行此操作?
  2. 为了做到这一点,我需要哪些工具或知识?
  3. 如何(如果不同)从托管代码中的非托管dll链接到导出的函数?

我问这个的原因是我想构建一个托管的zLib包装器.我知道在.NET中有托管类,但从经验来看它们有点受限(并且有点愚蠢,因为它们没有做适当的缓冲),所以我想创建自己的副本,也因为我想要学习如何做到这一点.

那么有谁知道我需要做什么以及如何做?

我发现了以下内容:

我将尝试这个,但任何其他可用的信息也会很好.

Pet*_*art 0

您是否尝试过在 System.Data.SQLite 上运行 Reflector 来看看它们是如何做到的?

我想你可以:

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

但是,由于 zlib 是 C 语言,因此您还可以使用 zlib 源将所需的调用包装在 C++ 实现的 CLR 程序集中。但我不确定在这种情况下你将如何处理位数。