1. 程式人生 > >Halcon學習(四) 匯出C++程式碼,在VS2010下編譯

Halcon學習(四) 匯出C++程式碼,在VS2010下編譯

Halcon中除了依賴於HDevelop平臺的操作,其他運算元都支援了C++語言介面,比如:
read_image()運算元:
這裡寫圖片描述
而dev_display()則沒有C++的介面:
這裡寫圖片描述

我們使用Halcon匯出一個簡單的功能運算元:
在HDevelop中只新增read_image (Image, 'fabrik')一行程式碼,選擇“檔案”–“匯出”,在“匯出”視窗中選擇匯出檔案的格式(C++ - HALCON/C++)並選擇匯出路徑:
這裡寫圖片描述

這樣在路徑下我們會看到一個.cpp檔案:
這裡寫圖片描述

這個檔案中,功能已經被定義到了action()函式中,所以我們需要的也只是該函式中的內容:

void action()
{ // Local iconic variables HObject ho_Image; ReadImage(&ho_Image, "fabrik"); }

可以看到,這個函式中呼叫的其實就是HDevelop幫助文件中read_image (Image, 'fabrik')運算元的C++介面。

我們使用VS2010測試這個匯出的函式,新建一個工程並新增一個空的檔案,在Halcon匯出的cpp檔案中摘錄如下程式碼:

#ifndef __APPLE__
#  include "HalconCpp.h"
#  include "HDevThread.h"
#  if defined(__linux__) && !defined(NO_EXPORT_APP_MAIN)
# include <X11/Xlib.h> # endif #else # ifndef HC_LARGE_IMAGES # include <HALCONCpp/HalconCpp.h> # include <HALCONCpp/HDevThread.h> # else # include <HALCONCppxl/HalconCpp.h> # include <HALCONCppxl/HDevThread.h> # endif # include <stdio.h> # include <HALCON/HpThread.h>
# include <CoreFoundation/CFRunLoop.h> #endif using namespace HalconCpp; using namespace std; int main() { HObject ho_Image; ReadImage(&ho_Image, "1.jpg"); return 0; }

設定VS2010

1.注意Halcon版本與VS2010中的應用程式對應
如果Halcon是64位的,那麼其對應的lib同樣是64位,這是選擇Win32程式的話會導致無法載入庫,所以我們需要想VS2010中的Win32改成X64。
這裡寫圖片描述

2.引入必要的標頭檔案
在(專案屬性)–(配置屬性)–(C/C++)–(常規)–“附加包含目錄”中新增路徑:

$(HALCONROOT)/include
$(HALCONROOT)/include/halconcpp

這裡寫圖片描述

3.包含庫路徑
在(專案屬性)–(配置屬性)–(連結器)–(常規)–“附加庫目錄”中新增庫路徑:

 $(HALCONROOT)/lib/$(HALCONARCH)

這裡寫圖片描述

4.新增庫
在(專案屬性)–(配置屬性)–(連結器)–(輸入)–“附加依賴項”中新增庫:

halconcpp.lib

這裡寫圖片描述

5.新增dll檔案
將缺少的dll檔案放進工程目錄原始檔所在的位置。Halcon的dll檔案在*\bin\x64-win64路徑下。