理解 Symbian 中的 ECom

Symbian 中也有類似Windows COM的機制,用來作爲二進制的模塊間接口標準。
ECom比起windows COM來要簡單得多,沒有GUID 沒有IUnknown,沒有marshal,沒有其他好多東西。。。

那麼,,,還剩下什麼呢?逐個說一下

首先 和COM一樣你的DLL要註冊,這樣別人才能找到你,不同的是,不是註冊到註冊表,DLL也沒有引出注
冊反註冊的函數(沒有類似DllRegisterServer and DllUnregisterServer的東西),而是寫一個RSS文件,
裏面寫上你的ECom的註冊信息,這個RSS文件編譯後生成RSC文件,放到系統的ECom插件註冊目錄下,這樣
系統就可以通過這個文件中的信息找到你的ECom DLL.這個RSS不難寫,基本上抄一個改個ID就好了。
唯一要注意的是,RSS編譯後產生的RSC文件名要和DLL文件名一樣。

*注意: 這裏的RSS和Blog那個rss不是一個概念,Symbian 裏面的資源文件的展名就是RSS。

然後,你的DLL必須實現一個引出函數
EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount);
這是必須的,這個函數返回一個結構數組,描述了這個DLL所包含的所有對象的ID 和 工廠函數的指針。
通常這個函數是返回一個DLL裏的全局變量比如:
const TImplementationProxy ImplementationTable[] =
    {
    IMPLEMENTATION_PROXY_ENTRY(0x13457890, CFoo::NewL)
    };

CFoo::NewL會返回一個,CFoo*,而CFoo一定是實現了 ID 0x13457890 對應的接口。

就是這麼簡單,和Windows的COM比起來非常原始,但是ECom在Symbian 和 S60裏面應用非常廣泛。
因爲手機系統需要極強的定製能力,大多數功能都是靠ECom實現的,不同版本的差異很多是靠發行
的時候採用不同的ECom來做的。ECom的DLL在製作成手機的ROM的時候和其他一般的DLL是有些不
一樣的,ECom會擁有一個單獨的區域,並且編制索引來保證ECom的加載會比其他DLL要快一些。
所以有些時候會把一些數據文件做成ECom,就是因爲加載比較快。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章