如何從dll公開課程?從C++ dll暴露類?
應用程序導入DLL應該能夠創建該類的對象,也他應該能夠調用到類的成員函數。
與使用_declspec(dllexport)公開C類型函數是否相似?
並且當我建立的DLL(僅包含在頭文件中,並在CPP文件及其成員函數定義的類定義),則不創建對應庫文件。
如何從dll公開課程?從C++ dll暴露類?
應用程序導入DLL應該能夠創建該類的對象,也他應該能夠調用到類的成員函數。
與使用_declspec(dllexport)公開C類型函數是否相似?
並且當我建立的DLL(僅包含在頭文件中,並在CPP文件及其成員函數定義的類定義),則不創建對應庫文件。
與使用
_declspec(dllexport)
公開C型功能相似嗎?
是的。而__declspec可以應用於該類。
沒有相應的庫文件被創建
IIRC這是默認的,但你可以覆蓋默認的連接選項。
看Def Files,在另外的第一環節,從有Using __declspec(dllexport)
Here。請記住,您不能使用LoadLibrary()/ GetProcAddress()來使用此導出的類。
谷歌搜索「class dllexport」導致this page from MSDN作爲第一個結果。
的頁面似乎表明僅僅有__declspec(dllexport)
是所有你需要做的。
在導出類中至少一個公共方法的定義必須具有_declspec(dllexport)的前綴被創建庫文件。如果沒有任何方法具有此前綴,則只有聲明(即頭文件)可用,但該類將無法實例化(導出的構造函數對此是必需的)。如果至少有一個方法有_declspec(dllexport)前綴,那麼編譯器會明白dll用戶必須能夠鏈接到這個dll。操作系統加載這樣的DLL,只要連接到它們的exe被加載。
您可能會考慮針對您的問題的「工廠」方法。例如,Symbian操作系統採用多態DLL實現了這種方法。要做到這一點,你必須:
聲明(即頭文件)和定義(即cpp文件)在你的dll類。無需其他任何東西。
創建您的DLL「工廠」的功能,這將使一個實例類,並返回指針。該函數必須具有_declspec(dllexport)前綴。
與你的用戶分享你的頭文件和lib文件。
用戶包含頭文件並鏈接到lib文件。
用戶調用工廠功能實例化的類(即使對象),然後用它作爲普通的類。
以上5個步驟在Symbian操作系統中就像魅力一樣。你將不得不在自己的平臺上嘗試它併發布結果。坦率地說,我沒有在Windows上嘗試過。
事實上,我們可以將整個類聲明爲_declspec(dllexport),它允許類被實例化,並且允許調用成員函數。 (如上面答案中的鏈接所示)。 – 2009-02-22 14:42:18