У меня проблемы с регистрацией и использованием динамической библиотеки под Windows 7 x64, 64-битная версия dll компилируется, но выводит журнал компилятора:
Error MSB3073: The command "RegSvr32 /S "...\x64\Debug\xxxxx.dll" exited with code 3.
Но когда я собираю 32-битную версию dll, вывод журнала компилятора приводит к тому, что команда RegSvr32 прошла успешно.
Я уже установил Linker >> General >> Register Output
в No
в обеих конфигурациях сборки x86 и x64.
Я попытался запустить 64-разрядную и 32-разрядную версию RegSvr32 (без режима без вывода сообщений) с 64-разрядной DLL, но он отвечает следующей ошибкой:
The module "xxxxx.dll" failed to load. Make sure the binary is stored at the specified path or debug it to check for problems with the binary or dependent .DLL files. The specified module could not be found.
Я проверил это с помощью средства для обхода зависимостей, и он сообщил, что более 100 DLL отсутствуют, поэтому я не могу показать их здесь. Некоторые из них:
API-MS-WIN-CORE-COM-L1-1-1.DLL
API-MS-WIN-CORE-DATETIME-L1-1-1.DLL
API-MS-WIN-CORE-DEBUG-L1-1-1.DLL
API-MS-WIN-CORE-ERRORHANDLING-L1-1-1.DLL
API-MS-WIN-CORE-FILE-L1-2-1.DLL
...
WLANUTIL.DLL
WLDAP32.DLL
WTSAPI32.DLL
XMLLITE.DLL
Зависимость Уокер с открытой DLL:
Мне интересно, что причина только 64-битная версия DLL не может зарегистрироваться с помощью RegSvr32.
Любая помощь очень важна для решения этой проблемы.
ОБНОВЛЕНИЕ 1
Попытка запустить приложение с этой динамической библиотекой приводит к следующей ошибке (как 32-разрядной, так и 64-разрядной версии):
The program can't start because api-ms-win-core-errorhandling-l1-1-1.dll is missing from your computer. Try reinstalling the program to fix this problem.
Все распространяемые пакеты, которые я сейчас установил:
Есть ли какие-нибудь визуальные распространяемые файлы c ++, которые мне нужно установить, чтобы решить эту проблему?
ОБНОВЛЕНИЕ 2
Я нашел больше информации о api-ms-win-core-errorhandling-l1-1-1.dll
Вот и попробовал связать WindowsApp.lib
с этой динамической библиотекой, но это даже не решило проблему.
ОБНОВЛЕНИЕ 3
Я запустил проверку системных файлов, и она выдала мне следующий вывод, как я думал:
Windows Resource Protection did not find any integrity violations.
Если вы дойдете до своей основной библиотеки DLL, вы можете отлаживать ее до тех пор, пока она не даст сбой. Если вы этого не сделаете, вы должны взглянуть на окно вывода, чтобы увидеть любые соответствующие сообщения. Возможно, вам придется изменить фильтры выходного окна тоже. Щелкните правой кнопкой мыши в окне вывода и проверьте все категории сообщений, чтобы убедиться, что оно дает вам все, а затем снова выполните отладку.
Это должно по крайней мере сказать вам, где вы терпите неудачу. Ищите сбои загрузки модуля и тому подобное
Отредактировано для добавления — вы можете попробовать просто изменить шаг сборки, удалив «/ S». Это режим «Без звука», и в этом случае вы хотите видеть сообщения.
Я наконец решил проблему, удалив mincore.lib
из связанных .lib
файлы в x86 и x64 версиях проекта, которые я недавно связал, чтобы использовать GetFileVersionInfoSize
API-функция.