打包DLL檔案需要注意的東西!

2021-08-01 06:04:29 字數 1611 閱讀 7558

1、對於不同vs平台打包的dll是不能共用的:

例如:vc120核心打包的opencv是無法在vc100核心上執行的,其否則在執行時會出錯。這就要求使用對於的opencv版本。或者在vs整合環境下安裝

兩個核心,例如vc100跟vc120。一般在安裝vs的時候會自己帶乙個核心。其中為:

其中vc10是適合在vs2010上測vc100核心上跑的。所以打包的時候也要選好合適的核心進行編譯,否則很容易出錯。

2、怎麼打包的dll能被引用?

其中的對外的總介面函式需要使用「 extern "c" __declspec(dllexport)」進行修飾,這個是告訴編譯器這個是c或者c++語言,

extern "c" __declspec(dllexport) bool init(); //初始化svm分類器

/**src_img 是影象資料指標

*rows 是影象的行數

*cols 是影象的列數

*channels 是影象的通道數

*minarea 識別的影象最小面積,預設引數是1000.

*///extern "c" food_api int foodrecognition(string src_path, bool iscamera, int min_area);

//extern "c" food_api char* foodrecognition(int* srcimg, int with, int height, int channel, int min_area);

extern "c" __declspec(dllexport) char* foodrecognition(int min_area);

其中那些不對外的函式則不需任何處理--值得是介面函式。介面函式呼叫的一些其他函式是不需要處理的。其中匯入的dll就相當於把其cpp或者hpp加入c#工程裡某個cpp裡的全域性變數還是全域性變數。例如:在某個cpp裡定義了乙個全域性

變數,其categorizer c(clusters)如下:

3、如果dll工程也是呼叫了其他第三方庫的該怎麼出來?

其中拿opencv來做例子,如果我乙個人臉識別的介面函式呼叫了一些opencv的dll檔案,這時我打包的dll名字叫face.dll檔案,則在c#怎麼進行呼叫?

我們需要把face.dll呼叫的所有dll檔案放到c#工程exe對應的位置,其不用在工程裡新增lib檔案,其只需要dll檔案即可。

lib檔案的作用:

這是當dll不在exe目錄下時,需要通過lib檔案進行查詢。

4、為什麼有的dll打包會有lib檔案有的只有dll檔案?

當介面函式的「 extern "c" __declspec(dllexport)」宣告放在了.h檔案,則會有lib檔案生成,如果介面函式的「 extern "c" __declspec(dllexport)」直接放到cpp檔案裡的函式定義裡則其是只有dll檔案。

css中浮動需要注意的東西

1.css中的浮動 在css中為了讓元素移動到父元素的左邊或者右邊,我們可以對元素設定浮動float.2.float left right 浮動的選擇有兩種,一種是float left左浮動。還有一種是float right右浮動 3.如果對乙個元素設定了浮動,那麼這個元素就會脫離標準文件流,並且該...

菜鳥程式設計師需要注意的東西

1 改變角色,摒棄學生身份。職場與教室是完全不同的兩個環境,直白來說,教室內彼此的競爭僅僅是面子問題。爭強好勝而已。職場的競爭無論何時何地都存在,只是表面是否和諧而已。所以說,不要傻傻分不清。簡單來說,就拿問問題來說,如果是學生問老師,刨根問底,緊追不捨,都無可厚非。老師自然會知無不答,因為這是職業...

考試要注意的東西

問題彙總 1.認真讀題,至少兩遍 尤其是資料範圍 廢話 2.資料的初始化問題 3.檢查提交檔案 4.除了讀入優化不用getchar.5.變數不要打錯 尤其是遍歷的時候 6.寫線段樹的時候不要為了方便複製前面的不然很難找出錯誤 7.任何時候都要手推樣例 8.有思路先不要寫再考慮一下 9.位運算的優先順...