Я разработчик для 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 ++ собирал как 32-разрядную, так и 64-разрядную версии, а затем во время выполнения при управлении. EXE запускается, использует 32-битную или 64-битную DLL в зависимости от ОС?
Или, может быть, есть лучшее решение, о котором я не знаю?
Заранее спасибо!