Я работаю над проектом ATL. Когда я строю свое решение в системе x64, оно не работает на архитектуре x86 и наоборот. (Я не могу зарегистрировать DLL, сгенерированный в другой архитектуре). Где может быть проблема? любая помощь будет оценена.
Упомянутые вами симптомы вряд ли будут точно такими, как описано. Неважно, если вы встраиваете Win32
или же x64
важно то, какая целевая платформа выбрана при сборке. Затем,
Я не могу зарегистрировать DLL, сгенерированный в другой архитектуре
В 32-битной Windows нет возможности использовать x64
DLL, это поведение по дизайну. Однако в 64-битных системах у вас обычно есть как 32-, так и 64-битные «среды», и вы можете использовать и зарегистрировать Win32
DLL там есть. Если вы не можете, типичная причина в том, что отсутствует обязательная зависимость (CRT или другая DLL, Зависимость Уокер может быть полезным) Вы должны проверить это, потому что Q не имеет соответствующей информации по этому вопросу.
Другая возможная проблема может быть связана с «использованием» DLL, помимо ее регистрации. Если вы «используете» DLL из вашей, например, сборки приложения .NET для AnyCPU
платформы, и приложение работает как 64-битный процесс в 64-битной Windows, тогда оно не будет выбирать и использовать вашу 32-битную DLL.
[D: \ команды] > введите regsvr_32bit.bat @ эхо выключено rem "% SystemRoot% \ Syswow64 \ regsvr32.exe"% s * начать "", regsvr_32bit.exe.lnk "% ~ f1" [D: \ команды] > _
Файл .lnk — это обычный ярлык Windows.
Вместо этого вы можете использовать путь, указанный в комментарии.
Обратите внимание, что 64-разрядные исполняемые файлы находятся в каталоге [system32], а 32-разрядные исполняемые файлы находятся в каталоге [SysWOW64]. Хотя это может быть довольно запутанным для тех, кто думает, это мера совместимости, которая Just Works ™ для тех, кто не думает. Так как я склонен думать, я долго боролся с этим …
Вот результат для regsvr32 (как пример):
[C: \ Program Files (x86) \ Microsoft Visual Studio 11.0] > свалка / заголовки "% SystemRoot% \ Syswow64 \ regsvr32.exe" | найти "машину" 14C машина (x86) 32-битный словарь [C: \ Program Files (x86) \ Microsoft Visual Studio 11.0] > свалка / заголовки "% SystemRoot% \ system32 \ regsvr32.exe" | найти "машину" 8664 машина (x64) [C: \ Program Files (x86) \ Microsoft Visual Studio 11.0] > _