前言
創(chuàng)建DLL有幾種不同的方式,最簡(jiǎn)單直接的的方式就是通過VS自帶的動(dòng)態(tài)鏈接庫(kù)(DLL)項(xiàng)目,把相關(guān)的功能封裝成一個(gè)類,然后導(dǎo)出幾個(gè)接口方法,編譯成功以后生成DLL文件,就可以在其他地方跟正常的第三方庫(kù)配置之后一樣調(diào)用了。
01創(chuàng)建DLL
首先打開VS創(chuàng)建一個(gè)DLL空項(xiàng)目,打開VS的桌面向?qū)缦拢?/p>
創(chuàng)建DLL鏈接庫(kù)項(xiàng)目
然后在頭文件中添加mytest.h文件,添加代碼如下:
#pragmaonce #ifdef_DLL_EXPORTS #defineDLL_API_declspec(dllexport) #else #defineDLL_API_declspec(dllimport) #endif #include然后在源文件中添加mytest.cpp文件,添加代碼如下://=========導(dǎo)出函數(shù)C++調(diào)用接口============ classDLL_APIMyTestDLL{ public: intaddData(inta,intb); ~MyTestDLL(); };
#define_DLL_EXPORTS #includeMyTestDLL::~MyTestDLL(){ std::cout<"destory?instance?done!"?< 編譯運(yùn)行成功,顯示如下:
02DLL測(cè)試程序
創(chuàng)建測(cè)試程序,來測(cè)試DLL。新建一個(gè)控制臺(tái)空項(xiàng)目,在源文件中添加main.cpp文件,然后添加如下代碼:
#include"opencv2/opencv.hpp" #include"mytest.h" intmain(intargc,char**argv){ std::cout<"test?mydll..."?<mydll(newMyTestDLL()); intsum=mydll->addData(3,5); std::cout<"DLL?invoke?result?:?"?< 運(yùn)行結(jié)果如下:
YOLOv8對(duì)象檢測(cè)DLL測(cè)試
采用相同的方法,基于ONNXRUNTIME深度學(xué)習(xí)模型庫(kù)框架, 我對(duì)以前ONNXRUNTIME + YOLOv8對(duì)象檢測(cè)C++代碼稍作修改,封裝了一個(gè)YOLOv8對(duì)象檢測(cè)推理類為DLL,支持C++與C#接口調(diào)用。客戶端調(diào)用代碼如下:
#include"yolov8_infer.h" #include#include std::stringlabel_map="D:/python/yolov5-7.0/classes.txt"; intmain(intargc,char**argv){ std::stringnames="10:bike"; intpos=names.find_first_of(":"); std::cout<>"<classNames; std::ifstreamfp(label_map); std::stringname; while(!fp.eof()){ getline(fp,name); if(name.length()){ classNames.push_back(name); } } fp.close(); //std::shared_ptr detector(newYOLOv5ORTDetector()); std::shared_ptr detector(newYOLOv8ORTDetector()); detector->initConfig("D:/python/my_yolov8_train_demo/yolov8n.onnx",640,640,0.25f,0.5); cv::VideoCapturecapture("D:/images/video/sample.mp4"); cv::Matframe; std::vector results; while(true){ boolret=capture.read(frame); if(frame.empty()){ break; } int64start=cv::getTickCount(); detector->detect(frame,results); floatfps=static_cast (cv::getTickFrequency())/(cv::getTickCount()-start); cv::putText(frame,cv::format("FPS:%.2f",fps),cv::Point(50,50),cv::FONT_HERSHEY_SIMPLEX,1.0,cv::Scalar(255,0,255),2,8); for(DetectResultdr:results){ cv::Rectbox=dr.box; cv::putText(frame,classNames[dr.classId],cv::Point(box.tl().x,box.tl().y-10),cv::FONT_HERSHEY_SIMPLEX,.5,cv::Scalar(0,0,0)); } cv::imshow("YOLOv8+ONNXRUNTIME-DLL導(dǎo)出演示",frame); charc=cv::waitKey(1); if(c==27){//ESC退出 break; } //resetfornextframe results.clear(); } return0; } 審核編輯:湯梓紅
-
dll
+關(guān)注
關(guān)注
0文章
116瀏覽量
45572 -
接口
+關(guān)注
關(guān)注
33文章
8712瀏覽量
152015 -
封裝
+關(guān)注
關(guān)注
127文章
8008瀏覽量
143461 -
C++
+關(guān)注
關(guān)注
22文章
2114瀏覽量
73887 -
動(dòng)態(tài)鏈接庫(kù)
+關(guān)注
關(guān)注
0文章
11瀏覽量
7077
原文標(biāo)題:手把手教你 封裝DLL類 給客戶端調(diào)用
文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
LABVIEW 創(chuàng)建DLL 文件 字符串連接
LabVIEW中DLL文件的創(chuàng)建過程和編程結(jié)果
怎么為dll創(chuàng)建頭文件?
comres.dll下載 (comres.dll文件病毒)
![comres.<b class='flag-5'>dll</b>下載 (comres.<b class='flag-5'>dll</b><b class='flag-5'>文件</b>病毒)](https://file.elecfans.com/web2/M00/48/BA/pYYBAGKhtByAGq9xAAAMTVF3ww4249.jpg)
usp10.dll下載 (usp10.dll文件)
![usp10.<b class='flag-5'>dll</b>下載 (usp10.<b class='flag-5'>dll</b><b class='flag-5'>文件</b>)](https://file.elecfans.com/web2/M00/48/BA/pYYBAGKhtByADrkNAAARKDLd95Y364.jpg)
如何編寫dll文件
如何用pb編寫dll文件
Delphi教程之取得和修改文件的創(chuàng)建和修改日期
創(chuàng)建基于DLL的Proteus仿真模型
Arduino板是什么如何使用IDE軟件創(chuàng)建和上傳Arduino程序到Arduino板
![Arduino板是什么如何使用IDE軟件<b class='flag-5'>創(chuàng)建和</b>上傳Arduino<b class='flag-5'>程序</b>到Arduino板](https://file.elecfans.com/web1/M00/91/BE/o4YBAFzabZiADCXmAAEngSq1sqI046.png)
使用LabVIEW調(diào)用DLL文件的方法
![使用LabVIEW調(diào)用<b class='flag-5'>DLL</b><b class='flag-5'>文件</b>的方法](https://file.elecfans.com/web1/M00/CD/1E/pIYBAF-agT2AUjEeAAGXOhGwOc0834.png)
FreeRTOS任務(wù)如何創(chuàng)建和刪除?
DLL簡(jiǎn)介
![<b class='flag-5'>DLL</b>簡(jiǎn)介](https://file1.elecfans.com/web2/M00/88/87/wKgZomRrHwCAFeHrAAAihyl4c0s261.png)
如何使用TSMaster調(diào)用外部DLL/LIB程序
![如何使用TSMaster調(diào)用外部<b class='flag-5'>DLL</b>/LIB<b class='flag-5'>程序</b>](https://file.elecfans.com/web2/M00/40/07/pYYBAGJrUk2AaMaTAAAQONQtdzo461.jpg)
評(píng)論