利用VS编写并调用动态链接库
来源:互联网 发布:淘宝电商培训 编辑:程序博客网 时间:2024/06/05 23:00
写一下基于opencv库的C++代码怎么建立dll动态库,并将动态库进行调用。
一:建立生成动态链接库的工程 builddlllibrary。
1:打开vs
2:新建工程
3:选择确定
4:下一步,具体对话框的选择如下图所示。
我的头文件有两个
第一个是包含各种库的头文件"headfiles.h“
#ifndef _HEADFILES_H_#define _HEADFILES_H_#include <opencv2/core/core.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <opencv2/highgui/highgui.hpp> #include <opencv2/objdetect/objdetect.hpp>#include <opencv2/ml/ml.hpp>#include <iostream> #include <ctype.h> #include <vector>#include <fstream>#include <cv.h> #include <cvaux.h> #include<io.h>#include"math.h"using namespace cv;using namespace std; #endif
第二个是自己的头文件"builddlllibrary.h"
#pragma once #include"headfiles.h"#ifdef DLL_IMPLEMENT #define DLL_API __declspec(dllexport) #else #define DLL_API __declspec(dllimport) #endif namespace zdd{//导出类 class DLL_API SimpleDll{public:SimpleDll();~SimpleDll();int add(int x, int y); //简单方法 void ImageEqualizeHist(Mat &src_img, Mat &res_img);};}cpp文件有一个“builddlllibrary.cpp”
#define DLL_IMPLEMENT #include "builddlllibrary.h"namespace zdd{SimpleDll::SimpleDll(){}SimpleDll::~SimpleDll(){}int SimpleDll::add(int x, int y){return x + y;}void SimpleDll::ImageEqualizeHist(Mat &src_img, Mat &res_img){int i;//IplImage* src = cvLoadImage("0078.bmp", 1);IplImage* src = &IplImage(src_img);IplImage* imgChannel[4] = { 0, 0, 0, 0 };IplImage* dst = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 3);if (src){for (i = 0; i < src->nChannels; i++){imgChannel[i] = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1); //要求单通道图像才能直方图均衡化}//通道分离cvSplit(src, imgChannel[0], imgChannel[1], imgChannel[2], imgChannel[3]);//BGRAfor (i = 0; i < dst->nChannels; i++){//直方图均衡化,原始图像和目标图像必须是单通道cvEqualizeHist(imgChannel[i], imgChannel[i]);}//通道组合cvMerge(imgChannel[0], imgChannel[1], imgChannel[2], imgChannel[3], dst);res_img = (dst);}}}
对上面工程载dubug模式(此方法同样适用于release模式)下进行编译, 在debug文件下生成了 builddlllibrary.dll 和builddlllibrary.lib 两个文件。
下面建立一个工程testdlllibrary对动态库进行调用。 工程的建立与普通的工程建立一样。
建立完成后,将builddlllibrary.dll ,builddlllibrary.lib ,builddlllibrary.h 和headfiles.h 四个文件放到工程目录下,将 builddlllibrary.h 和headfiles.h加载到工程中,主函数如下:
#include "builddlllibrary.h"#include <iostream>#pragma comment(lib,"builddlllibrary.lib")using namespace zdd; using namespace std;int main(char argc, char**argv){ SimpleDll sd;cout << "sd.add: 3+5=" << sd.add(3, 5) << endl;cv::Mat srcimg = imread("0044.bmp");Mat resimg;sd.ImageEqualizeHist(srcimg, resimg);imshow("src", srcimg);imshow("res", resimg);waitKey(0);return 0;}
0 0
- 利用VS编写并调用动态链接库
- Java调用vs环境下C++编写的动态链接库
- VS2013 编写调用 动态链接库
- VS2013编写和调用动态链接库
- C#编写和调用动态链接库
- C语言编写DLL动态链接库并分别用VB和Python调用
- 在vs 2003下编写和使用动态链接库
- 简单Demo:动态调用自己编写的动态链接库
- ctypes: 使用python调用C编写的动态链接库
- PB调用VC编写的动态链接库
- C++编写动态链接库供VFP调用
- 【PB】powerbuilder调用VC编写的动态链接库
- vs2010中动态链接库的编写和调用
- C++对动态链接库的编写和调用
- C#调用C++编写的动态链接库dll文件
- C和C++编写、调用动态链接库的方法
- 简单 Demo:C++编写、调用动态链接库
- VS动态链接库隐式创建和调用
- centos6.5环境通过shell脚本备份php的web及mysql数据库并做远程备份容灾
- android QQ账号登陆第三方应用
- iTween研究院之学习笔记Move移动篇(一)
- 用Oracle sqlldr导入文本文件TXT 总结
- ajax提出post请求,请求正常执行,但是返回error错误
- 利用VS编写并调用动态链接库
- Linux shell 脚本的入门指南
- Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
- C#Color颜色对照表
- 自定义控件三部曲之绘图篇(十六)——给控件添加阴影效果与发光效果
- OpenCV从入门到放弃(四):HighGui组件细讲
- Android平台遥控器按键映射流程
- 欢迎使用CSDN-markdown编辑器
- Mac OS X 系统12个常用的文本编辑快捷键(移动、选中)