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

标签 dll assemblies embed unmanaged managed

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

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

IE。我的问题是:

  • 我需要按什么顺序执行此操作?
  • 为了做到这一点,我需要什么工具或知识?
  • 我如何(如果不同)从我的托管代码中的非托管 dll 链接到导出的函数?

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

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

    我发现了以下内容:
  • How to merge several managed and unmanaged DLLs into a single DLL?
  • Sample: Mixing Unmanaged C++, C++/CLI, and C# code

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

    最佳答案

    你有没有试过在 System.Data.SQLite 上运行反射器来看看他们是怎么做的?

    我想你可以:

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

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

    关于dll - 如何将非托管 dll 和托管程序集合并到一个文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2721271/

    相关文章:

    flash - 是否可以嵌入文件夹中的所有文件?

    c++ - 是否需要注册一个 dll 才能使用它

    c++ - 编译器是否能够对从 dll 导入的函数进行程序集成?

    c++ - QT从资源/指定路径加载dll

    visual-studio - .NET VS2005 WinForms : How do i drop a user control onto a form?

    c# - 在为 aspx 页面编译动态程序集期间未触发 AssemblyResolve 事件

    css - 如何在嵌入的内容中隐藏 Youtube 控件、标题和 Logo

    r - 在 cmd 窗口中运行 R 脚本时出错

    c# - 从 GAC 或其他地方浏览/选择程序集

    c# - 在 Visual C# 2010 中将 DLL 嵌入到 .exe 中