У меня есть приложение WinForms, которое имеет библиотеку C ++ под названием DeviceAccess.
Библиотеки C # ориентированы на .NET Framework 4.5.1 (x86), а моя библиотека C ++ ориентирована на Windows SDK Версии 8.1 и Platform Toolset Visual Studio 2017 (v141) и Win32. Я создаю приложение на своем компьютере с Windows 10 и пытаюсь запустить его через виртуальные машины Windows 8.1 и Windows 7.
Я уже установил эти два определения в targetver.h, который выглядит следующим образом:
#pragma once
#define WINVER 0x0601
#define _WIN32_WINNT 0x0601
#include <SDKDDKVer.h>
Но, все же, когда я открываю приложение через свою виртуальную машину Windows 8.1 или Windows 7, я получаю следующую ошибку:
Could not load file or assembly '...DeviceAccess.dll' or one of its dependencies. The specified module could no be found.
У меня есть .dll в той же папке, что и приложение.
У кого-то есть идеи, почему я не могу загрузить библиотеку C ++, пожалуйста?
РЕДАКТИРОВАТЬ:
Я запустил Process Monitor и отфильтровал отсутствующую DLL, как показано ниже:
Я чувствую, что отсутствующий VCRUNTIME140.dll может быть проблемой?
EDIT2:
От Dependecy Walker я получил эти ошибки при загрузке этой DLL:
Поэтому я решаю свою проблему.
У меня был установщик установки WiX со следующими командами:
<DirectoryRef Id="TARGETDIR">
<Merge Id="VCRedist" SourceFile="..\MergeModules\Microsoft_VC140_CRT_x86.msm" DiskId="1" Language="0"/>
<Merge Id="VCRedist2" SourceFile="..\MergeModules\Microsoft_VC140_CXXAMP_x86.msm" DiskId="1" Language="0"/>
</DirectoryRef>
<Feature Id="VCRedist" Title="Visual C++ 14.0 Runtime" AllowAdvertise="no" Display="hidden" Level="1">
<MergeRef Id="VCRedist"/>
<MergeRef Id="VCRedist2"/>
</Feature>
Который развертывает msvcp140.dll и vcruntime140.dll. Однако я все еще скучал по программам Универсального ЭЛТ. Так что я использую это подход:
Обновлено 11 сентября 2015 г .: поддерживается локальное развертывание универсального CRT на уровне приложений. Чтобы получить двоичные файлы для локального развертывания приложения, установите Windows Software Development Kit (SDK) для Windows 10. Двоичные файлы будут установлены в C: \ Program Files (x86) \ Windows Kits \ 10 \ Redist \ ucrt. Вам нужно будет скопировать все библиотеки DLL с вашим приложением (обратите внимание, что набор библиотек DLL необходим для разных версий Windows, поэтому вы должны включить все библиотеки DLL, чтобы ваша программа работала во всех поддерживаемых версиях Windows). ).
Таким образом, после того, как я скопировал все двоичные файлы из x86 в папку своего приложения, я смог запустить его на виртуальной машине Windows 8.1.
РЕДАКТИРОВАТЬ: Для тех, кому интересно, как развернуть универсальные библиотеки CRT в установщике установки WiX, я следовал этот.
Других решений пока нет …