2014-02-24 92 views
0

我正在開發一個項目(VS 2012解決方案),其中包括joystic.cpp。項目已創建爲DLL,以便能夠從另一個項目調用庫。應用程序通過對話計時器以獨佔模式接收即時遊戲手柄數據,並將其顯示在對話框中。使用__declspec從DLL導出函數(dllexport)

我編輯的resource.h文件與宏:

#ifdef LIBRARY_EXPORTS 
# define LIBRARY_API __declspec(dllexport) 
#else 
# define LIBRARY_API __declspec(dllimport) 
#endif 

爲了能夠通過命令導出功能:

LIBRARY_API function(); 

不過,我應該出口程序的所有功能,或不?

回答

0

Should I export all functions of the program, or not?

通常在設計庫的接口時,應該只導出庫的使用者所需的函數。

如果您導出每個函數,那麼您將需要記錄每個函數。但是,圖書館消費者可能不需要許多功能。許多功能對於圖書館的實施將是私人的。

更重要的是,通過導出所有功能,您將使圖書館未來的開發變得更加困難。如果您想將接口更改爲您導出的這些專用功能之一,該怎麼辦?您將不得不引入具有不同名稱的另一個函數,或者使用現有名稱,從而破壞二進制向後兼容性。這些選項都不具吸引力。

實質上,圖書館公共界面的表面積越大,維護任務就越大。因此,您通常旨在提供儘可能最小的公共接口,爲圖書館消費者提供所需的功能。

+0

感謝您的回覆。但是,我仍然有點困惑。在我的joystic.cpp中,每個函數都是從WinMain中調用的,並且似乎所有這些函數都需要用來獲得打印遊戲手柄代碼的對話框。我必須只導出WinMain嗎?我試過這個命令:'extern「C」int __declspec(dllexport)__stdcall _tWinMain(HINSTANCE hInst,HINSTANCE h0,LPTSTR lpCmdLine,int nCmdShow);'但失敗,錯誤:'C2059語法錯誤'__declspec(dllexport)''什麼我需要做什麼? – dempap

+0

你不能輸出'WinMain'。您只需要導出從庫外部調用的任何函數。如果這恰好是你的圖書館中的所有功能,那麼這將是不尋常的。我試圖更廣泛地回答。 –

相關問題