AnyCPU/x86/x64 для приложения C# и это - C++ / зависимость CLI

Я - разработчик Windows, я использую Microsoft visual studio 2008 SP1. Моя машина разработчика составляет 64 бита.

Программным обеспечением я в настоящее время продолжаю работать, управляют .exe, записанный в C#. К сожалению, я не мог решить целую проблему только в C#. Вот почему я также разработал маленький управляемый DLL в C++ / CLI. Оба проекта находятся в том же решении.

Моей целью сборки C# .exe является "Любой ЦП". Когда моя цель сборки DLL C++ является "x86", DLL не загружается. Насколько я понял, когда я погуглил, причиной является C++ / язык CLI, в отличие от других языков.NET, компиляций к собственному коду, не управляемому коду.

Я переключил цель сборки DLL C++ на x64, и все работает теперь. Однако AFAIK, все прекратит работать, как только мой клиент установит мой продукт на 32-разрядной ОС. Я должен поддерживать Windows Vista и 7, обе версии на 32 и 64 бита каждого из них.

Я не хочу отступать к 32 битам. То, что 250 строк кода C++ в моем DLL составляют только 2% моей кодовой базы. И что DLL используется только в нескольких местах, таким образом, в типичном сценарии использования он даже не загружается.

Мой DLL реализует два COM-объекта с ATL, таким образом, я не могу использовать "/clr:safe" установку проекта.

Там путь состоит в том, чтобы настроить решение и проекты так, чтобы сборки проекта C# "Какой-либо ЦП" версия, проект C++ создал и версии на 64 бита и на 32 бита, затем во времени выполнения, когда управляемый.EXE запускает, это использует или 32-разрядный DLL или 64-разрядный DLL в зависимости от ОС?

Или возможно существует некоторое лучшее решение, о котором я не знаю?

Заранее спасибо!

17
задан Soonts 3 June 2010 в 06:47
поделиться

1 ответ

Нет простого способа обойти это. Если у вас есть собственный код (например, ваш C ++) и вам нужно поддерживать x86, вам необходимо скомпилировать x86 (если вы не хотите работать в мире WOW ... т.е. запускать 32-битный код как в 32-битной, так и в 64-битной среде). Вы можете иметь как x86, так и x64 дистрибутивы, но если вы поддерживаете как 32-, так и 64-разрядные версии, и у вас есть собственный код или ввод COM, тогда вам необходимо иметь оба 32 и 64-битные двоичные файлы. «Любой процессор» действительно полезен только тогда, когда нет собственного кода или взаимодействия, тогда вы получаете это преимущество.

7
ответ дан 30 November 2019 в 14:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: