1. 程式人生 > >vs2013 打包並呼叫dll(opencv,多函式複雜情況下)

vs2013 打包並呼叫dll(opencv,多函式複雜情況下)

首先,先推薦兩個具有高質量的部落格,先把這兩個案例做成功了,我這邊的案例也差不多了。

博主認為使用函式進行打包的方法更加簡單。為避免前兩個博主的文章消失,我再說一些我的這邊的過程。主要說使用函式打包的方法,響應題目。 使用函式打包: 1. 這個專案的第一件事情:建立無匯出符號的dll空專案; 2. 然後就是將之前寫的函式程式碼複製進去,再去配置opencv的環境,錯誤都解決好了如下圖。 dllmain.cpp不用管,將之前寫的函式程式碼複製到新建的專案cpp中,圖片中Imgset.cpp是我的專案中新加的cpp檔案,這就是複雜的地方,但是知道引用現有cpp檔案就可以了,沒有影響。 複製程式碼過程:dllmain.cpp不用管,將之前寫的函式程式碼複製到新建的專案cpp中,圖片中Imgset.cpp是我的專案中新加的cpp檔案,這就是複雜的地方,但是僅僅引用現有cpp檔案就可以了,沒有影響。 注意:

如果之前的函式有要呼叫的相對路徑的檔案的話,在這裡不用複製到這個專案的相對路徑下,而是複製到呼叫這個dll的專案下去使用; 記得在需要呼叫的函式那裡加上__declspec(dllexport) void Bleeding()中的__declspec(dllexport) 。

3.然後生成,即可得到dll和lib檔案;

呼叫dll:

1. 新建專案C++/Win32控制檯應用程式,命名。選擇沒有預編譯頭。 2. 呼叫dll內的類函式。
    // test_Bleed.cpp : 定義控制檯應用程式的入口點。
    //
    #include "stdafx.h"
#include <stdio.h> #include <iostream> using namespace std; #pragma comment(lib, "Bleed.lib") //呼叫dll檔案時候必須用到的 void Bleeding(); //對剛才寫好的處理函式進行宣告 //主函式 int main() { Bleeding(); return 0; }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3.生成解決方案,現在肯定是很多錯誤; 4.將dll和lib檔案拷貝到debug資料夾下,與exe檔案是同一個資料夾,另外,之前dll引用的檔案也都複製到現在這個專案的與cpp同一資料夾下; 5.右鍵專案名字選擇屬性,->配置屬性->VC++目錄->常規-庫目錄,選擇你放置了lib的debug資料夾。 ->配置屬性->連結器-輸入-附加依賴項-編輯加入lib的檔名(全名包含字尾)-確認 6.重新生成,執行即可

然後就成功了,博主是一般看到網上沒有一些好的資料的時候,就會寫一些東西到csdn上來,一般都是挺不錯的資料,我覺得。覺得同樣感覺到不錯的朋友可以點一波關注~

首先,先推薦兩個具有高質量的部落格,先把這兩個案例做成功了,我這邊的案例也差不多了。

博主認為使用函式進行打包的方法更加簡單。為避免前兩個博主的文章消失,我再說一些我的這邊的過程。主要說使用函式打包的方法,響應題目。 使用函式打包: 1. 這個專案的第一件事情:建立無匯出符號的dll空專案; 2. 然後就是將之前寫的函式程式碼複製進去,再去配置opencv的環境,錯誤都解決好了如下圖。 dllmain.cpp不用管,將之前寫的函式程式碼複製到新建的專案cpp中,圖片中Imgset.cpp是我的專案中新加的cpp檔案,這就是複雜的地方,但是知道引用現有cpp檔案就可以了,沒有影響。 複製程式碼過程:dllmain.cpp不用管,將之前寫的函式程式碼複製到新建的專案cpp中,圖片中Imgset.cpp是我的專案中新加的cpp檔案,這就是複雜的地方,但是僅僅引用現有cpp檔案就可以了,沒有影響。 注意:

如果之前的函式有要呼叫的相對路徑的檔案的話,在這裡不用複製到這個專案的相對路徑下,而是複製到呼叫這個dll的專案下去使用; 記得在需要呼叫的函式那裡加上__declspec(dllexport) void Bleeding()中的__declspec(dllexport) 。

3.然後生成,即可得到dll和lib檔案;

呼叫dll:

1. 新建專案C++/Win32控制檯應用程式,命名。選擇沒有預編譯頭。 2. 呼叫dll內的類函式。
    // test_Bleed.cpp : 定義控制檯應用程式的入口點。
    //
    #include "stdafx.h"
    #include <stdio.h>    
    #include <iostream>  
    using namespace std;

    #pragma comment(lib, "Bleed.lib")        //呼叫dll檔案時候必須用到的    
    void Bleeding();          //對剛才寫好的處理函式進行宣告    
    //主函式    
    int main()
    {
        Bleeding();
        return 0;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

3.生成解決方案,現在肯定是很多錯誤; 4.將dll和lib檔案拷貝到debug資料夾下,與exe檔案是同一個資料夾,另外,之前dll引用的檔案也都複製到現在這個專案的與cpp同一資料夾下; 5.右鍵專案名字選擇屬性,->配置屬性->VC++目錄->常規-庫目錄,選擇你放置了lib的debug資料夾。 ->配置屬性->連結器-輸入-附加依賴項-編輯加入lib的檔名(全名包含字尾)-確認 6.重新生成,執行即可

然後就成功了,博主是一般看到網上沒有一些好的資料的時候,就會寫一些東西到csdn上來,一般都是挺不錯的資料,我覺得。覺得同樣感覺到不錯的朋友可以點一波關注~