第一步:在我本机电脑生成一个目录存放工程文件E:\Project\test。用notepad++写3个文件
Test.h
#ifndef __TEST__
#define __TEST__
#ifdef __cplusplus
extern "C" {
#endif
__declspec(dllexport) void __stdcall Test();
#ifdef __cplusplus
}
#endif
#endif
Test.cpp
#include "Test.h"
#include <opencv.hpp>
__declspec(dllexport) void __stdcall Test()
{
IplImage* ipl = cvLoadImage("E:\\123.jpg");
if(ipl){
cvSaveImage("e:\\123.bmp", ipl);
cvReleaseImage(&ipl);
}
}
makefile
opencv_Include1=./Opencv/include
opencv_Include2=./Opencv/include/opencv
opencv_Include3=./Opencv/include/opencv2
opencv_Lib=./Opencv/lib -lopencv_core2410 -lopencv_highgui2410 -lopencv_imgproc2410
Test.dll:Test.o
g++ Test.o -L $(opencv_Lib) -shared -o Test.dll
Test.o:Test.h Test.cpp
g++ -c -w Test.cpp -o Test.o -I $(opencv_Include1) -I $(opencv_Include2) -I $(opencv_Include3)
clean:
rm edit Test.o
那么现在就需要编译了,首先是安装Mingw,再次安装msys。如图
第二步:点击MSYS。输入 cd "E:\Project\test"
第三步:输入make。按回车键
第四步:查看dll
第五步:思考。为什么Test函数后面有一个@0呢??这是因为用到__stdcall。去掉__stdcall。代码如下:
#ifndef __TEST__
#define __TEST__
#ifdef __cplusplus
extern "C" {
#endif
__declspec(dllexport) void Test();
#ifdef __cplusplus
}
#endif
#endif
#include "Test.h"
#include <opencv.hpp>
__declspec(dllexport) void Test()
{
IplImage* ipl = cvLoadImage("E:\\123.jpg");
if(ipl){
cvSaveImage("e:\\123.bmp", ipl);
cvReleaseImage(&ipl);
}
}
再次在MSYS里面执行make。如图
测试demo:https://download.csdn.net/download/sz76211822/10466486