前言
創(chuàng)建DLL有幾種不同的方式,最簡單直接的的方式就是通過VS自帶的動態(tài)鏈接庫(DLL)項目,把相關的功能封裝成一個類,然后導出幾個接口方法,編譯成功以后生成DLL文件,就可以在其他地方跟正常的第三方庫配置之后一樣調用了。
01創(chuàng)建DLL
首先打開VS創(chuàng)建一個DLL空項目,打開VS的桌面向導如下:
創(chuàng)建DLL鏈接庫項目
然后在頭文件中添加mytest.h文件,添加代碼如下:
#pragmaonce #ifdef_DLL_EXPORTS #defineDLL_API_declspec(dllexport) #else #defineDLL_API_declspec(dllimport) #endif #include然后在源文件中添加mytest.cpp文件,添加代碼如下://=========導出函數(shù)C++調用接口============ classDLL_APIMyTestDLL{ public: intaddData(inta,intb); ~MyTestDLL(); };
#define_DLL_EXPORTS #includeMyTestDLL::~MyTestDLL(){ std::cout< 編譯運行成功,顯示如下:
02DLL測試程序
創(chuàng)建測試程序,來測試DLL。新建一個控制臺空項目,在源文件中添加main.cpp文件,然后添加如下代碼:
#include"opencv2/opencv.hpp" #include"mytest.h" intmain(intargc,char**argv){ std::cout<mydll(newMyTestDLL()); intsum=mydll->addData(3,5); std::cout< 運行結果如下:
YOLOv8對象檢測DLL測試
采用相同的方法,基于ONNXRUNTIME深度學習模型庫框架, 我對以前ONNXRUNTIME + YOLOv8對象檢測C++代碼稍作修改,封裝了一個YOLOv8對象檢測推理類為DLL,支持C++與C#接口調用??蛻舳苏{用代碼如下:
#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導出演示",frame); charc=cv::waitKey(1); if(c==27){//ESC退出 break; } //resetfornextframe results.clear(); } return0; } 審核編輯:湯梓紅
-
dll
+關注
關注
0文章
116瀏覽量
46090 -
接口
+關注
關注
33文章
8959瀏覽量
153252 -
封裝
+關注
關注
128文章
8553瀏覽量
144856 -
C++
+關注
關注
22文章
2117瀏覽量
74818 -
動態(tài)鏈接庫
+關注
關注
0文章
11瀏覽量
7129
原文標題:手把手教你 封裝DLL類 給客戶端調用
文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
LABVIEW 創(chuàng)建DLL 文件 字符串連接
LabVIEW中DLL文件的創(chuàng)建過程和編程結果
怎么為dll創(chuàng)建頭文件?
comres.dll下載 (comres.dll文件病毒)

usp10.dll下載 (usp10.dll文件)

mfc71.dll是什么

Delphi教程之取得和修改文件的創(chuàng)建和修改日期
Arduino板是什么如何使用IDE軟件創(chuàng)建和上傳Arduino程序到Arduino板

使用LabVIEW調用DLL文件的方法

評論