Я пишу программу, использующую C# и C++ (C# вызывает C++). В инете люди говорят, что есть конфликт с 64-битной и 32-битной сборкой, но я поставил все проекты либо на win32, либо на x86. См. изображение ниже.Текущие настройки

Я также попытался установить приложение С# на «любой процессор», но результат тот же. На изображении ниже показана ошибка, которую я получаю.сообщение об ошибке

По рекомендации HansPassant я изменил свои настройки C# на prefer 32-bit, это приводит к той же ошибке. введите здесь описание изображения

Кто-нибудь знает решение моей текущей проблемы?

0
wes 28 Ноя 2019 в 17:52
Конфигурация вашего решения настроена на 32-битный код. Влияет на ваш проект C++, но не на ваш проект C#. Для последнего вы должны принудительно использовать компилятор типа «точно в срок», который он использует во время выполнения. Не «anycpu», это будет 64-битный процесс. Проект > Свойства > вкладка "Сборка", флажок "Предпочитать 32-разрядную версию". Повторите для конфигурации выпуска.
 – 
Hans Passant
28 Ноя 2019 в 19:19
Спасибо за ваш комментарий. Я больше не на работе в течение дня. Я проверю завтра утром и сообщу вам, если это проблема.
 – 
wes
28 Ноя 2019 в 20:58
К сожалению, это не решает мою текущую проблему.
 – 
wes
29 Ноя 2019 в 10:36

1 ответ

Сначала вам нужно определить расположение библиотек x86 и x64:

x86path = (Path.GetDirectoryName(Assembly.GetAssembly(GetType()).CodeBase) + @"\x86\").Replace("file:\\", "");
x64path = (Path.GetDirectoryName(Assembly.GetAssembly(GetType()).CodeBase) + @"\x64\").Replace("file:\\", "");

Затем, чтобы использовать нужную библиотеку и правильно вызвать ее, попробуйте пакет InteropDotNet: https://github. com/AndreyAkinshin/InteropDotNet

Github: https://www.nuget.org/packages/InteropDotNet/

Возможно, вы не захотите использовать весь пакет, но у него есть приятная функция, которая генерирует код для вызова собственной библиотеки.

0
Mark McWhirter 28 Ноя 2019 в 18:07
Вы имеете в виду расположение библиотеки оболочки CLI? Эту DLL я добавил в проект C#. Я просто читаю ридми, и он использует DLLimport, в моем случае компания хочет использовать CLI. И одна из зависимостей в полном проекте не может работать в x64, поэтому все должно работать в x86.
 – 
wes
28 Ноя 2019 в 18:13