Я разработчик Windows, я использую Microsoft visual studio 2008 SP1. Моя машина для разработчиков - 64 бит.
В настоящее время я работаю над программным обеспечением, написанным на С#.exe. К сожалению, я не смог решить всю проблему исключительно на С#. Вот почему я также разработал небольшую управляемую DLL в С++/CLI. Оба проекта находятся в одном и том же решении.
My С#.exe build target - "Любой процессор". Когда моя цель сборки С++ DLL - "x86", DLL не загружается. Насколько я понял, когда я googled, причина в том, что язык С++/CLI, в отличие от других языков .NET, компилируется в собственный код, а не управляется кодом.
Я переключил цель сборки С++ DLL на x64, и теперь все работает. Тем не менее, AFAIK все перестанет работать, как только мой клиент установит мой продукт на 32-разрядную ОС. Я должен поддерживать Windows Vista и 7, как 32, так и 64-разрядные версии каждого из них.
Я не хочу возвращаться к 32 битам. Это 250 строк кода на С++ в моей DLL составляет всего 2% от моей кодовой базы. И эта DLL используется только в нескольких местах, поэтому в типичном сценарии использования она даже не загружена.
Моя DLL реализует два COM-объекта с ATL, поэтому я не могу использовать параметр /clr: safe.
Есть ли способ настроить решение и проекты, чтобы проект С# создавал версию "Любой процессор", проект С++ создает и 32-битную и 64-битную версии, а затем во время выполнения, когда управляемый .EXE запускается, он использует 32-разрядную DLL или 64-разрядную DLL в зависимости от ОС?
Или может быть какое-то лучшее решение, о котором я не знаю?
Спасибо заранее!