關於win32 dll 的相關知識總結

來源:互聯網
上載者:User



1.

關於dll
訪問路徑問題

先是查system
下是否有DLL
,然後再查當前工程目錄 或者用VB
調用時直接使用絕對路徑。

2.

關於vb
調用VC DLL
介面問題的闡述

法一:

DLL
匯出函數定義 

extern "C" double
_stdcall 
GetDistance(LPCSTR
strGPS1,LPCSTR strGPS2)

{

  

函數體

}

說明

:extern "C"
相容C
語言,_stdcall
用WINAPI
調用規約
適用於VB
其中需要注意的是

關於介面參數字串類型的相容性問題,由於VB
採用的WINAPI
的,所以在VC++
編寫DLL
時,對字元型的參數需要用LPCSTR
定義,否則用VB
調用時會出錯。

接下來編譯 *.def
檔案

  
LIBRARY
GpsLocating

EXPORTS

GetDistance

  

主要作用就是:定義需要匯出的函數

Vb
中的調用寫法:

  
Declare + Function(
如果無傳回值用sub)+ lib +
路徑 +
(參數)as
+
傳回型別。

執行個體:

Private Declare Function GetDistance
Lib "G:/GPS
測距/GPStest(VB)/GpsLocating.dll"(ByVal
strGPS1 As String, ByVal strGPS2 As String) As Double

法二:

  

採用_declspec(dllexport)
方式,並不是和VB
調用,不作細講。

 

3.

關於VC++
載入DLL
的問題

簡單做法:只需在link
中填寫*.lib
,然後加入此Dll
的標頭檔,即可

(1).
靜態匯入

      #pragma
comment(lib,"*.lib")
      extern +
函數;/
或者 _declspec(dllimport) +
函數

(2).
動態匯入

     HINSTANCE hDll;

     hDll =
LoadLibrary("*.dll");  //
動態載入DLL

     typedef
函數類型 (*ADDPROC)(
函數參數)

//
定義函數指標類型

     ADDPROC Add =
(ADDPROC)GetProcAddress(hDll,"
函數名")
;//
擷取DLL
匯出函數 此時匯出函數就是Add

     FreeLibrary("*dll"); //
釋放DLL

例子:在dll1.dll
中有add
函數

     HINSTANCE hDll;

     hDll =
LoadLibrary("Dll1.dll");  //
動態載入DLL

     typedef int (*ADDPROC)(int
a,int b)
; //
定義函數指標類型

     ADDPROC Add =
(ADDPROC)GetProcAddress(hDll,"add")
;//
擷取DLL
匯出函數 此時匯出函數就是Add

     FreeLibrary("Dll1.dll");
//
釋放DLL

兩種匯入方式的對比:

靜態匯入:自動載入dll
,自動釋放DLL
,不過整個工程都會載入這dll
,會找出記憶體浪費

動態匯入:按照 LoadLibrary+GetProcAddress+FreeLibrary
模式動態載入,靈活,有需要時才載入。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.