64-битные и 32-битные неуправляемые dll в одной системе - лучшие практики? - PullRequest
1 голос
/ 04 октября 2011

У меня есть общая библиотека DLL, которая встроена в 32-битную и 64-битную. Обе сборки используют одно и то же имя, foo.dll. Как я могу установить оба файла foo.dll в системе, чтобы мои 32-битные и 64-битные приложения находили правильные dll на своем пути.

Windows сама использует SysWOW64 (для 32-разрядных библиотек) и System32 (для 64-разрядных библиотек). Я хотел бы избежать развертывания в этих папках. Каков принятый способ (если таковой имеется), чтобы dll с обеими битами сосуществовали в одном и том же блоке и находились в соответствующих приложениях, связанных с ними?

Ответы [ 2 ]

2 голосов
/ 04 октября 2011

Если вы не внедряете в папку, которая подвергается перенаправлению файлов (например, system32), то вам в значительной степени нужно дать DLL-файлам разные имена.Причина этого заключается в том, что путь поиска DLL является общим для 32- и 64-разрядных процессов, и если вы используете путь поиска для поиска DLL, это заставляет вас использовать разные имена.исключение любых решений, основанных на управлении версиями SxS.Попытка пойти по этому пути приводит к всевозможным осложнениям и головным болям для всех, кто пытается использовать вашу DLL.

0 голосов
/ 04 октября 2011

Вы не указали, как устанавливали свои двоичные файлы или как они загружались или устанавливались, но я предполагаю, что решение будет включать в себя наличие отдельных каталогов установки для 32-разрядных и 64-разрядных установок.

Традиционно 32-разрядные приложения, установленные на 64-разрядных компьютерах, обычно устанавливаются в подпапку «c: \ program files (x86)» вместо «c: \ program files».Я предполагаю, что 32-битные приложения и настройки (включая MSI), которые вызывают GetSpecialFolder, будут перенаправлены в каталог c: \ program files (x86).

Вам не нужно беспокоиться о 64-битныхдвоичные файлы устанавливаются на 32-битной ОС.Просто заблокируйте это от установки, так как эти двоичные файлы не будут загружаться в любом случае.

...