Как объединить неуправляемую dll и управляемую сборку в один файл? - PullRequest
7 голосов
/ 27 апреля 2010

SQLite из PHX Software объединил управляемую сборку (System.Data.SQLite) с неуправляемой DLL (32- или 64-битная DLL SQLite) в один файл и сумел связать их вместе .

Как мне это сделать? Нужно ли встраивать управляемую сборку в неуправляемую dll или наоборот?

есть. мои вопросы:

  1. В каком порядке мне нужно это сделать?
  2. Какие инструменты или знания мне нужны для того, чтобы сделать это?
  3. Как (если отличается) связать экспортированные функции из неуправляемой библиотеки DLL в моем управляемом коде?

Причина, по которой я спрашиваю это, заключается в том, что я хочу создать управляемую оболочку zLib. Я знаю, что в .NET есть управляемые классы, но по своему опыту они немного ограничены (и немного туповаты в том, что они не выполняют надлежащую буферизацию), поэтому я хотел бы создать свою собственную копию, в том числе потому, что я хочу научитесь это делать.

Так кто-нибудь знает, что мне нужно делать и как?

Я нашел следующее:

Я собираюсь попробовать это, но любая дополнительная доступная информация также будет полезна.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2012

ищите mergebin из sqlite , это должно быть то, что вы ищете.

может объединять как управляемые, так и неуправляемые сборки вместе.

MS также, кажется, что-то говорит об использовании здесь

0 голосов
/ 14 марта 2012

Вы пытались запустить отражатель на System.Data.SQLite, чтобы увидеть, как они это делают?

Я полагаю, вы могли бы:

  • Включение 32-битных и 64-битных библиотек в качестве ресурсов в управляемую сборку
  • Извлечь правильный в зависимости от битности куда-то
  • Вызовите SetDllDirectory () через PInvoke, если необходимо, чтобы окна могли найти извлеченную dll
  • Создание 32- или 64-битного управляемого класса-оболочки, имеющего ссылки на dll

Однако, поскольку zlib находится в C, вы также можете обернуть нужные вызовы в реализованную C ++ сборку CLR, используя исходный код zlib. Но я не уверен, как бы вы справились с битностью в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...