Проблема вкратце: как вызвать функцию из DLL A.dll с помощью p / invoke, когда A.dll зависит от другой SXS-lib (в моем случае MSVCR90.DLL)?
Я бы хотелвызвать функцию в DLL с помощью pinvoke.сам pinvoke прекрасно работает для других библиотек.Вызов функции в DLL из неуправляемого C ++ тоже работает нормально.
Проблема в том, что в DLL есть ссылка на MSVCR90.DLL, которая находится в некоторых папках SXS.
Использование LoadLibrary в C ++библиотека может быть использована как уже упоминалось.Используя C #, я не знаю, как загрузить библиотеку.Я всегда получаю сообщение об ошибке MSVCR90.DLL на компьютере.
Вот так выглядит загрузка библиотеки:
[DllImport("C:\\work\\dllhell\\sample\\sample.dll",
EntryPoint = "sample", CallingConvention = CallingConvention.Cdecl)]
public static extern int sample();
При вызове функции sample
я получаю толькоследующая ошибка: HRESULT: 0x8007007E о том, что библиотека не найдена.На самом деле, библиотека существует в разных версиях в каталогах SXS.
Я пытался использовать Dependency Walker (зависит), но до сих пор не смог найти нужную версию библиотеки.
В комплект поставки входит также манифест с библиотекой, содержащей следующую запись:
В манифест включено следующее утверждение:
<assemblyIdentity type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8'
processorArchi tecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
Запрошенная версия существует на моем компьютере, яиспользуя VS 2010, который поставляет более новые версии этой библиотеки, но это не должно быть проблемой, я думаю.
Я обнаружил множество потоков, обсуждающих подобные проблемы.Я знаю, у меня есть проблема с зависимостями, но я нигде не мог найти решение.Я знаю мою отсутствующую зависимость, у меня есть манифест, но должен ли он это делать и для C #?Не только для неуправляемого C ++?