Symbian中IMPORT_C關鍵字釋義

gudesheng發表於2008-01-03

        在Symbian程式中我們經常會看到IMPORT_C這個關鍵字,它是C:/Symbian/8.0a/S60_2nd_FP2_SC/epoc32/include下e32def.h檔案裡面定義的一個巨集. 

原定義如下:

#define IMPORT_C __declspec(dllexport)

那麼__declspec(dllexport)又是什麼東東呢?

先看程式碼:

以下是在dev-c++裡建立自已的dll時的dll.h裡面的程式碼,這裡面有一個_declspec(dllexport)

#ifndef _DLL_H_
#define _DLL_H_     //防重複定義

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */


DLLIMPORT void HelloWorld (void);


#endif /* _DLL_H_ */

 

         上面程式碼裡面的_delcspce(dllexport)被定義為巨集,這樣可以提高程式的可讀性!這個的作用是將函式定義為匯出函式,也就是說這個函式要被包含這個函式的程式之外的程式呼叫!本語句中就是:void Helloword(void)

         摘自msdn:在 32 位編譯器版本中,可以使用 __declspec(dllexport) 關鍵字從 DLL 匯出資料、函式、類或類成員函式。__declspec(dllexport) 將匯出指令新增到物件檔案

        若要匯出函式,__declspec(dllexport) 關鍵字必須出現在呼叫約定關鍵字的左邊(如果指定了關鍵字)。例如:

__declspec(dllexport) void __cdecl Function1(void);

        若要匯出類中的所有公共資料成員和成員函式,關鍵字必須出現在類名的左邊,如下所示:

class __declspec(dllexport) CExampleExport : public CObject{ ... class definition ... };

        生成 DLL 時,通常建立一個包含正在匯出的函式原型和/或類的標頭檔案,並將 __declspec(dllexport) 新增到標頭檔案中的宣告。若要提高程式碼的可讀性,請為 __declspec(dllexport) 定義一個巨集並對正在匯出的每個符號使用該巨集:

#define DllExport   __declspec( dllexport ) 

__declspec(dllexport) 將函式名儲存在 DLL 的匯出表中。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1476646


相關文章