Есть ли в Visual Studio 2008 макрос, определяющий 64-разрядную ОС Windows? - PullRequest
2 голосов
/ 04 января 2011

Вот проблема:

Чтобы # импортировать правильную версию ADO для моей 32-битной программы, мне нужно знать, собираюсь ли я на 32-битной ОС Windows (имеется в виду файлнаходится в Program Files) или в 64-битной ОС (имеется в виду, что файл находится в Program Files (x86)).Но я не могу найти макрос, который говорит мне об этом, или даже макрос, который говорит мне, что процессор 64-битный.

Когда я тестирую его на 64-битной Windows 7 под управлением Visual Studio 2008 Express,определены следующие подходящие макросы:

_M_IX86
X86

Но ни один из макросов * 64 не определен, что, я полагаю, будет иметь место, еслиони ссылаются на / target / architectures, а не на архитектуру текущего компьютера.

Существует ли макрос препроцессора, который сообщит мне, работаю ли я с 64-разрядной ОС Windows?

А если так, что это?Я бы даже согласился на один, который скажет мне, использую ли я 64-битный процессор.

(ps я уже знаю этот список )

Обновление

До сих пор люди, кажется, думают, что такого макроса нет, и лучше скопировать библиотеки DLL или использовать переменные среды.

Итак,Подсказка для переменной среды. Я обошел проблему для разработчиков, поместив обе папки - Program Files (x86) и Program Files - в путь включения и используя синтаксис угловой скобки #import.Тем не менее, я подозреваю, что мне потребуется создавать версии выпуска для каждой версии ОС, поскольку библиотеки ADO DLL теперь являются частью ОС и не подлежат распространению.Глядя на это.

Ответы [ 3 ]

10 голосов
/ 04 января 2011

Проверьте это: _WIN64

Описано здесь:

http://msdn.microsoft.com/en-us/magazine/cc300794.aspx

Я использую это, и оно работает.

Ваша ситуация более сложнаяв том, что вы хотите знать ОС, а не тип компиляции.Я все время использую Windows x64, но я компилирую 32-битные и 64-битные приложения._WIN64 определяется только тогда, когда я компилирую 64-битное приложение, а не когда я компилирую 32-битное приложение, даже если я всегда на компьютере с Windows x64.

Я думаю, что вы должны просто настроить свои каталоги включения по-другомучтобы скрыть эту сложность.Можно предположить, что каталоги включений будут сильно различаться на разных машинах, поэтому полная автоматизация определения пути, вероятно, будет слишком умной для вашего же блага в долгосрочной перспективе.

2 голосов
/ 27 февраля 2014

У меня была такая же проблема, но не только с ado, но и с другими библиотеками (ESRI).Таким образом, решение было следующим: в настройках проекта -> C / C ++ -> препроцессор -> «определения препроцессора»: добавлен следующий текст: COMPILATION_PLATFORM = $ (PROCESSOR_ARCHITECTURE)

И в коде я могу принять решение простопример того, как это работает:

#if ((COMPILATION_PLATFORM == AMD64) && (_WIN64))
#pragma message( "StdAfx.cpp  >> COMPILATION HOST IS RUNNING on WINDOWS64, Generated code = x64 (64bit)" )
#elif ((COMPILATION_PLATFORM == AMD64) && (_WIN32))
#pragma message( "StdAfx.cpp  >> COMPILATION HOST IS RUNNING on WINDOWS64, Generated code = x86 (32bit)" )
#elif ((COMPILATION_PLATFORM == x86) && (_WIN64))
#pragma message( "StdAfx.cpp  >> COMPILATION HOST IS RUNNING on WINDOWS32, Generated code = x64 (64bit)" )
#elif ((COMPILATION_PLATFORM == x86) && (_WIN32))
#pragma message( "StdAfx.cpp  >> COMPILATION HOST IS RUNNING on WINDOWS32, Generated code = x86 (32bit)" )
#endif

Я надеюсь, что это может помочь вам.Marek

2 голосов
/ 04 января 2011

Я не знаю макрос, но вы можете использовать переменную окружения PROCESSOR_ARCHITECTURE. Обратите внимание, что вы можете получить доступ к переменным среды из диалоговых окон настроек Visual Studio, используя нотацию $ (PROCESSOR_ARCHITECTURE).

Кроме того, обходным решением для вашего случая может быть определение переменной среды, такой как ADO_LIB_DIR, установка ее в правильном каталоге программных файлов, а затем импорт библиотеки lib или добавление каталога include с нотацией, использующей $ (ADO_LIB_DIR) переменная. Таким образом, все, что вам нужно будет сделать при компиляции на новом компьютере, это установить переменную окружения.

Обновление: я вижу, что есть также переменные окружения $ (ProgramFiles) и $ (ProgramFiles (x86)), поэтому лучше всего их использовать.

...