1
在Windows項目中,我們定義一個接口類DLL導出和虛擬方法
class Interface {
public:
virtual ~Interface() { }
virtual void func() = 0;
};
和工廠功能
__declspec(dllexport) Interface *construct();
一個DLL裏面。當然在DLL裏面有一個具體的Interface
,但是我們不會導出它。不過,我們可以在DLL之外使用它。這個怎麼用?由construct()
構造的實例的vftable
由函數指針組成,函數指針指向不由DLL導出的函數。這種方法是可以接受的還是或多或少的黑客行爲?
所以,如果COM永遠不會出口除工廠功能以外的任何東西,它必須是一個被廣泛接受的技術。 – phlipsy
而V表的佈局來自公共可用的標題,它定義了「接口」? – phlipsy
是的,粗略地說,是編譯器根據接口的聲明來構建它。一個相當臭名昭着的DLL地獄的來源btw,版本化是困難的。客戶端使用接口的新聲明並意外加載舊版本的DLL會嚴重崩潰。 COM要求您在更改界面時始終更改界面IID的核心原因。 –