2014-04-01 48 views
1

我從C++ DLL中導出了一個方法,然後從VB.net窗體應用程序調用它。 C++方法目前沒有返回值(void),但我想改進它並返回一個代表一系列錯誤代碼的int值。 (如果一切順利,我打算返回零)。在C++中定義錯誤代碼常量的地方

在哪裏以及如何定義這些錯誤代碼的最佳位置?

我應該做我的CPP文件的頂部如下:

#define ERR_NEGATIVE_CELL_SIZE 1 
#define ERR_INVALID_FILE_PATH 2 
etc 

的VB.net應用也將定義這些相同的代碼,然後顯示用戶界面消息,基於代碼的用戶。

很明顯,我寧願在DLL中引發異常,並在VB.net中捕獲它(以及相關的異常消息),但這似乎不可能使用extern「C」__declspec(dllexport)方法。

很高興聽到其他設計模式。我還計劃通過C++控制檯可執行文件公開DLL方法,因此將錯誤消息一次存儲在DLL中並將它們提供給控制檯和UI應用程序是非常理想的。

回答

5

請儘可能避免預處理器。

對於您的情況,定義一個枚舉將是合理的。 在函數原型旁邊定義它。 爲了暴露翻譯,請使用翻譯功能並導出。 喜歡的東西:

size_t TranslateError(int error, char* buffer, size_t size) 

返回:轉換消息的大小,在緩衝消息,如果回報< = LEN

5

如果你想的錯誤代碼是提供給其他編譯單元那麼他們最好放在在頭文件中。通常,在編寫庫代碼時,您可以創建一個或多個頭文件來聲明使用庫所需的所有常量,類型,函數和類。然後將這些實現編譯到庫中。庫的使用者包括您的標題和一個導入庫。

關於你的常量,你建議使用#define來聲明它們。不要這樣做。考慮使用常量或枚舉。預處理器通常儘可能少地使用。