Visual studio C ++: как сделать так, чтобы части кода не были видны компилятором Windows? - PullRequest
1 голос
/ 27 ноября 2010

Итак, в общем, у меня есть небольшой проект C ++, основанный на кроссплатформенных библиотеках OpenSource.Так что, вероятно, он будет компилироваться под Linux.Таким образом, я достиг точки, когда мне нужно реализовать некоторые классовые функции для платформы.

У меня есть заголовок класса со всеми объявлениями функций и файл cpp с реализациями.Итак, сначала: как объявить функции, специфичные для моей платформы, в заголовке, чтобы при попытке компиляции под linux он не пытался компилировать специфичные для Windows ... и когда компилятор под Windows не пытается компилировать функции linux, включая заголовки и т. Д.

Так что для Windows мне нужно кое-что, как обернуть такие супер специфические функции

HRESULT EnumerateDevices(REFGUID category, IEnumMoniker **ppEnum)
void DisplayDeviceInformation(IEnumMoniker *pEnum)

И некоторые заголовки

#include <windows.h>
#include <dshow.h>

#pragma comment(lib, "strmiids")

В то время как для Linux у меня есть такие заголовки

#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/videodev.h>

И у меня есть функция с именем void PrintCamerasList(), которую я хочу иметь для реализации нескольких платформ, для которой у меня есть отдельная.

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

Так зачем мне все это нужно - я создаю какое-то консольное приложение с использованием OpenCV и мне нужно перечислить пользовательские камерыимена.OpenCV c не может делать это самостоятельно .поэтому я спросил, как это сделать для обеих платформ моего интереса - windows и linux

Ответы [ 3 ]

3 голосов
/ 27 ноября 2010

Вы хотите просмотреть макросы для конкретной платформы и окружить, например, свой код MSVC несколькими парами #ifdef _WIN32 / #endif.

1 голос
/ 27 ноября 2010

Посмотрите на http://predef.sourceforge.net/ для обширного списка предопределенных макросов, которые предоставляют различные компиляторы, чтобы различать операционные системы, компиляторы и архитектуры процессоров.Они позволят вам различать больше, чем просто Win32 и Linux, если это необходимо.

1 голос
/ 27 ноября 2010

Обычной практикой является использование флага компилятора, например

#ifdef WIN_32
// Windows stuff...
#else
// Linux stuff
#endif

Проверьте точные значения того, какой флаг Windows определен в вашем компиляторе или в заголовках, которые вы включаете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...