C++ 多個類的 DLL 封裝以及隱式連結和顯式連結 2 種方法呼叫

發表於2016-12-01

將OpenCL和OpenCV一些簡單的方法封裝成DLL,具體OpenCL和OpenCV的配置方法可以參考本人的部落格。

VS2015下安裝與編譯OpenCV原始碼並在VS2015下配置OpenCV環境

VS上執行CUDA,並在NVDIA顯示卡安裝的CUDA中執行OpenCL

1.  DLL封裝

(1)  建立DLL工程

新建一個Win32控制檯應用程式,專案名稱為buildopencldll,選擇DLL和空專案。

(2)新建標頭檔案

標頭檔案:createopencldll.h

向動態連結庫新增類的核心程式碼:

為顯式連結做準備的匯出函式:

建立類時必須加上CREATEOPENCLDLL_API,如寫成class CREATEOPENCLDLL_APICreateOpenCLDLL 要不然生成不了lib檔案

完整的標頭檔案程式碼如下:

(3)Cpp檔案:createopencldll.cpp

需要新增:#define CREATEOPENCLDLL_EXPORTS

完整的cpp程式碼如下:

(4)生成程式碼

按生成後,在的debug或者release資料夾中,會生成相應的DLL檔案和LIB檔案,如下圖生成buildopencldll.dllbuildopencldll.lib
 

2. C++ 多個類的 DLL 封裝

封裝好一個類之後,在後面的類可以呼叫這個類生成的dll,再封裝新類的dll。具體過程可以參考第1步。

在工程中新增標頭檔案createopencldll.h到新的工程目錄。在debug或者release檔案中複製buildopencldll.lib到新的工程目錄如下:

 在專案中,屬性->聯結器->輸入->附加依賴項中,新增buildopencldll.lib
將buildopencldll.dll複製到新工程的debug或者release目錄下。
具體新專案的createopencvdll.h程式碼如下:

createopencvdll.cpp程式碼如下:

3. DLL 的呼叫

新建一個win32控制檯應用程式,選擇控制檯應用程式,工程名字為:testdll,新建main函式。
(1)隱式連結

方法1:

在工程中新增標頭檔案createopencldll.h到新的工程目錄。在debug或者release檔案中複製buildopencldll.lib到新的工程目錄如下:

在專案中,屬性->聯結器->輸入->附加依賴項中,新增buildopencldll.lib
將buildopencldll.dll複製到新工程的debug或者release目錄下。
測試程式碼如下:

結果圖如下:


方法2:
在方法1的基礎下,不新增buildopencldll.lib到附加依賴項中,使用程式碼的方式新增,即在原來的程式碼下多新增:#pragmacomment(lib, “buildopencldll.lib”)程式碼如下:

(2)顯式連結

參考部落格:http://blog.csdn.net/chollima/article/details/5324808

這個部落格先定義虛基類,然後到基類等的實現,這樣比較好。

這種方法不需要createopencldll.lib,將createopencldll.dll複製到debug或者release目錄。

具體實現程式碼如下:

如果出現錯誤:

錯誤    C2664       “HMODULELoadLibraryW(LPCWSTR)”: 無法將引數 1 從“const char [19]”轉換為“LPCWSTR”    bulidopecvdll    f:\openclproject\bulidopecvdll\bulidopecvdll\main.cpp  18

進入屬性->常規->字符集,將使用Unicode字符集改為未設定即可。

參考部落格:

 

相關文章