SQLite от PHX Software объединил управляемую сборку (System.Data.SQLite) с неуправляемой dll (SQLite 32- или 64-разрядной dll) в один файл и сумел связать их вместе.Как объединить неуправляемую 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
Я собираюсь попробовать это, но любая дополнительная информация будет хорошо, как хорошо.
Подумайте дважды, прежде чем делать это, особенно с «основными» сборками. Если это не является основной особенностью вашего кода, лучше сделать такие сборки динамически загруженными.В другом случае любой, кто использует такую сборку, должен будет сделать некоторые дополнительные шаги, чтобы убедиться, что она использует правильную версию (x86 vs x64), даже если он не использовал какой-либо ваш неуправляемый код. Это разумно для примера «System.Data.SQLite» (важная функция), но может быть неразумным в вашем случае. – SergGr