我正在創建一個C++ dll以在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
已經定義或者我必須定義呢?以限定COMPILING_DLL
會不是事實,我在代碼中定義它,或者在命令行上,儘管#ifdef沒有意義 - 因爲指令總是被定義的? – Thalia
我終於明白這是如何工作的,預處理器指令IS NOT DEFINED AT ALL,因爲我使用的是網點代碼。它會在調用C++項目中定義。 – Thalia
@Thalia,你可以使用它作爲開關來控制你的代碼而不需要手動改變它。另一個例子是DEBUG常量。您可以用調試語句胡說你的代碼,然後用一個'#define',命令行開關或者從Debug到Release來忽略它們。 – Adam