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

来自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

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

最佳答案
您是否尝试在System.Data.SQLite上运行反射器以查看它们是如何进行的?

我想你可以:

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

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

转载注明原文:如何将非托管dll和托管程序集合并到一个文件中? - 代码日志