6.10.2007

DLL in CE : application's view

像絲絲一樣,DLL 也有兩種:
  1. 就像是一般library 一樣,啟動時就自動load進memory了。
  2. 像Driver一樣,被動的由AP load進入memory。
使用 1 的話,比較方便,因為是一般library,所以可以export 出class 。
使用 2的話,interface就受限制了,要是一般的cedel type c function,不能export class出來。


1 的dll 中:

要export 出來的class 要加上 DLLMACRO 的宣告:
class DLLMACRO CDummy
{
public:
....
其中 DLLMACRO 的定義是:
#ifdef _AFXDLL
#define DLLMARCO __declspec(dllexport)
#else
#define DLLMARCO __declspec(dllimport)
#endif
要用 AFXDLL 來區分的原因是..
這個header file會被 DLL 和 APP include,當是 DLL 參照時,DLLMACRO 要定義成 dllimport。
當被APP參照時,DLLMACRO要定義成 dllexport。

這個方法,build出來的DLL會產生兩個 file : *.dll, *.lib
  • *.dll : 是要放在 target image中。os啟動時會load起來。
  • *.lib : 是給 app link用。
所以 application 的project setting 中要把 這個 dll build出來的 *.lib 加到 link 的 addition library 中。

沒有留言: