Я создаю dll C++ для импорта в vb.net.Где я могу создать директивы препроцессора для экспорта dll?
Я обнаружил, что лучший способ организовать импорт и экспорт в файл заголовка DLL, это что-то типа:
#ifndef MY_DLL_EXPORTS
#define MY_DLL_EXPORT __declspec(dllexport)
#else
#define MY_DLL_EXPORT __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "C"
{
#endif
MY_DLL_EXPORT BOOL my_function(uint32_t x);
#ifdef __cplusplus
}
#endif
Мой вопрос, где же __cplusplus и MY_DLL_EXPORTS предполагается быть определенным ?
Я не делал этого раньше, и я не могу найти место в коде для него. Я прочитал что-то о том, чтобы поместить эти определения в
Project Properties -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions
Я поместил их в свойства проекта DLL? и если я это сделаю, то при использовании этой DLL они всегда будут определены, поэтому оператор if всегда будет обращаться к dllimport
?
Также есть __cplusplus
, который я определил или должен определить?
бы не тот факт, что я определяю его в коде, или в командной строке, сделать #ifdef бессмысленным - поскольку директива всегда будет определена? – Thalia
Я наконец понял, как это работает, директива препроцессора НЕ ОПРЕДЕЛЕНА ВСЕ, поскольку я использую этот код из сети точек. Однако он будет определен в вызывающем проекте C++. – Thalia
@Thalia, вы используете его как переключатель для управления кодом без его ручной смены. Другим примером является константа 'DEBUG'. Вы можете перенести свой код с помощью отладочных инструкций, а затем проигнорировать их одним синтаксисом '# define', командной строки или перейти от Debug to Release. – Adam