国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
在Symbian開發(fā)環(huán)境下如何編寫靜態(tài)接口DLL(動(dòng)態(tài)鏈接庫)
Symbian 的DLL分為兩種,一種是靜態(tài)接口DLL(static interface dll),一種是多態(tài)接口DLL(polymorphic interface dll)。
(一)靜態(tài)接口DLL(static interface dll):
靜態(tài)接口DLL一般使用DLL結(jié)尾,提供固定的API,給其他程序調(diào)用。靜態(tài)接口DLL在主調(diào)程序啟動(dòng)的時(shí)候被系統(tǒng)自動(dòng)載入到手機(jī)內(nèi)存里面(唯一的例外是如果該DLL是在ROM只讀存儲(chǔ)器里面,那么可以直接通過它的地址進(jìn)行調(diào)用)。并且如果沒有外部程序使用它了,它將被自動(dòng)的從內(nèi)存中卸載。
在Symbian OS編寫dll時(shí),要注意的問題是,不能有全局或靜態(tài)變量存在,這個(gè)一定要注意,在SDK中講得很清楚。
Symbian OS是基于ROM來處理程序的。DLL是通常是存儲(chǔ)在ROM中的(運(yùn)行也是在ROM中),所以它是不可寫的。雖然有時(shí)把DLL裝入RAM中運(yùn)行,但 Symbian OS仍舊假定DLL不可寫。因此Symbian OS中的DLL沒有數(shù)據(jù)段(Data Segment ),這就導(dǎo)致了DLL中不能包含有可寫的靜態(tài)數(shù)據(jù),不管其是否被初始化。

從DLL調(diào)用者的角度來看,DLL有三個(gè)文件組成:
(1)頭文件:.h的文件后綴,可以#include到主調(diào)程序的代碼中去,只有在編譯的時(shí)候有用。
(2)導(dǎo)出文件:.lib的文件后綴,可以由主調(diào)程序進(jìn)行鏈接,這個(gè)文件記載了DLL的提供的所有接口函數(shù)名稱和地址。
(3)DLL文件本身:.dll的文件后綴包括所有.lib文件記載的接口函數(shù)的具體實(shí)現(xiàn),主調(diào)函數(shù)在運(yùn)行的時(shí)候?qū)嶋H調(diào)用和執(zhí)行的部分。
從DLL編寫者的角度來看,DLL可以被看成是一個(gè)完整的Symbian項(xiàng)目。 它由以下幾部分組成:
(1)項(xiàng)目自己的MMP文件(在bld.inf文件中列出的)
(2)一個(gè)頭文件,指定了該DLL需要導(dǎo)出的接口
(3)源代碼文件,具體導(dǎo)出函數(shù)的實(shí)現(xiàn)

頭文件
DLL的頭文件與其它類的頭文件的頭文件非常類似。不同的地方在于
使用了IMPORT_C宏來定義所有導(dǎo)出函數(shù):
class CMyEngine : public CBase
{
public:
  // These functions are visibleby the
  // clients of the DLL andneeds to have
  // the IMPORT_C tag
  IMPORT_C static CMyEngine*NewL();
  IMPORT_C static CMyEngine*NewLC();

  IMPORT_C voidMyPublicMethod();
  IMPORT_C voidAnotherPublicMethod();
  ...
private:
  // These functions are notvisible by the
  // clients of the DLL and thendo not need
  // the IMPORT_C tag
  CMyEngine();
  void ConstructL();
  voidSomePrivateMethod();
}

實(shí)現(xiàn)文件
編寫DLL工作本身沒有什么需要復(fù)雜的地方,但是有兩個(gè)重要的
地方需要留意:
(1)E32Dll()函數(shù)必須實(shí)現(xiàn)
(2)另外一個(gè)特殊的宏,EXPORT_C,應(yīng)該加在每個(gè)導(dǎo)出函數(shù)實(shí)現(xiàn)
的前面。
例如:
// This function is mandatory for all DLLs
EXPORT_C TInt E32Dll(TDllReason)
{
      return KErrNone;
}

// This function is exported: The EXPORT_C tag shall beused.
EXPORT_C void MyPublicMethod()
{
  ...
}

// This one is not: The EXPORT_C tag shall not be used.
void SomePrivateMethod()
{
 // Do Something
}

MMP文件
DLL的MMP文件應(yīng)該有以下特點(diǎn)
(1)定義項(xiàng)目(project)的類型是dll
(2)使用正確的UID2的值(0x1000008d)

在開發(fā)過程中,你也應(yīng)該通過EXPORTUNFROZEN告訴編譯環(huán)境,DLL接口還沒有定稿,還可以隨時(shí)修改。

例如:
TARGET       MyEngine.dll
TARGETTYPE   dll
UID          0x1000008d
...
EXPORTUNFROZEN

把DLL接口定稿(Freezing DLL)
一旦你完成了DLL的開發(fā),在你發(fā)行你的DLL版本之前,應(yīng)該把接口定稿(Freezing),這樣可以確定將來發(fā)行的DLL可以向下兼容。

通過將項(xiàng)目的MMP文件中的EXPORTUNFROZEN關(guān)鍵字去掉,用常規(guī)的方法重新建立DLL,來實(shí)現(xiàn)DLL庫的定稿。這時(shí)候會(huì)有“.def文件不存在”的編譯警告信息出現(xiàn),不要緊,繼續(xù)就建立當(dāng)前項(xiàng)目,在項(xiàng)目編譯完畢以后,你可以用如下命令定稿:
abld freeze

注意:
所有的ARM平臺(tái)共享一個(gè).def文件,但是對于wins模擬器和winscwCodeWarrior環(huán)境來說,他們有不同的.def文件。一旦項(xiàng)目已經(jīng)定稿,重新生成makefile,這時(shí)候?qū)氲膌ib會(huì)直接通過定稿的.def,文件生成。

(二)多態(tài)接口DLL
多態(tài)接口DLL只有明確的通過調(diào)用RLibrary::Load()函數(shù)才能被載入到內(nèi)存中,而且在卸載的時(shí)候,也最好通過 RLibrary::Close()函數(shù)進(jìn)行卸載。多個(gè)多態(tài)接口DLL可以為外部程序?qū)С龆鄠€(gè)相同的函數(shù)的函數(shù)。所以,這種DLL通常情況下被廣泛應(yīng)用于實(shí)現(xiàn)某個(gè)應(yīng)用程序框架功能擴(kuò)展時(shí)候的插件。在Symbian系統(tǒng)中,多態(tài)接口DLL可以有多種不同的文件后綴。其中最著名的一個(gè)就是.app結(jié)尾的(應(yīng)用程序),.ldd(邏輯設(shè)備驅(qū)動(dòng)),.tsy和.csy(電話和通信服務(wù)模塊)等等。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
dll 和lib關(guān)系
Qt之創(chuàng)建并使用共享庫
Qt中純C++項(xiàng)目發(fā)布為dll的方法(超詳細(xì)步驟)
VC++加載動(dòng)態(tài)庫和靜態(tài)庫
C++/VC++編程的疑難問題及解答(二)
緊急:診斷安全算法已泄漏!
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服