要建立dll,就必須首先建立乙個或多個源**檔案,還有乙個連線檔案用來匯出函式。如果打算可以以載入時動態鏈結使用dll的話,還必須建立乙個導入庫。
建立原始檔
dll的源**中包含了需匯出的函式及資料,還有內部函式及資料,另外可以有乙個可選的入口函式。你可以使用任意支援建立基於windows的dll工具來建立dll。
如果你的dll需要支援多執行緒,應該讓你的dll做到「執行緒安全」。你必須同步dll所有的全域性資料以避免衝突發生,也必須確認你使用的庫也是執行緒安全的。例如,microsoft® visual c++®包含了多個c執行時庫,其中之一不是執行緒安全的,而另外兩個是執行緒安全的。
出口函式
如何指定出口函式與開發工具有關,有些編譯器允許在宣告出口函式時使用乙個修飾符即可,而對於另外一些而言,就必須在連線時指定乙個出口宣告檔案。
例如,visual c++中,就有兩種匯出dll函式的方式:_declspec修飾符或者乙個.def檔案。如果指定了_declspec修飾符,就不必宣告.def檔案。
建立乙個導入庫
導入庫(.lib)中包含了連線程式所需的出口函式的引用資訊,通過這些資訊,系統就可以在執行時定位所需的dll及dll出口函式。
例如,
要呼叫createwindow函式,就必須連線時匯入user32.lib庫,之所以這樣是因為createwindow函式處於user32.dll這個系統dll檔案中,user32.lib用來解析**中到user32.lib出口函式呼叫。dll載入後,呼叫dll中的函式需要進行修正,一旦系統初始化程式,由於需要dll中的出口函式,就會載入user32.dll,接著就會更新函式位址表入口,所有createwindow的呼叫都會轉而請求user32.dll中的出口函式。
警告dll中呼叫exitprocess函式將會當值不可預料的程式或系統錯誤。從dll中呼叫exitprocess時需確認您確實知曉到底是哪個程式或系統元件會載入這個dll,並且在上下文中呼叫是安全的。
建立靜態鏈結庫 動態鏈結庫
下面的實操中的動態庫或者靜態庫名都用wujunwu 第一步 建立乙個源 建立靜態鏈結庫的源 include void func1 void int func2 int x,int y 第二步 建立乙個.件作為函式宣告 void func1 void intfunc2 int x,int y 第三步 ...
建立動態鏈結庫
要建立dll,就必須首先建立乙個或多個源 檔案,還有乙個連線檔案用來匯出函式。如果打算可以以載入時動態鏈結使用dll的話,還必須建立乙個導入庫。建立原始檔 dll的源 中包含了需匯出的函式及資料,還有內部函式及資料,另外可以有乙個可選的入口函式。你可以使用任意支援建立基於windows的dll工具來...
動態鏈結庫的建立
動態鏈結庫的建立 使用匯出函式關鍵字 declspec dllexport 建立 mydll.h extern c declspec dllexport int max int a,int b extern c declspec dllexport int min int a,int b inclu...