首页 > 学院 > 开发设计 > 正文

vc6.0创建与调用dll

2019-11-06 07:11:25
字体:
来源:转载
供稿:网友

1.使用 VC6.0 生成 DLL

新建项目 “Win32 Dynamic-Link Library”,输入项目名称如:object,确定后选择 “A simple DLL PRoject” 点击“完成”。

 以下为cpp文件自动生成的代码:

#include "stdafx.h"

BOOL APIENTRY DllMain( HANDLE hModule, 

                       DWord  ul_reason_for_call, 

                       LPVOID lpReserved

)

{

    return TRUE;

}

 

编辑cpp文件:

在#include "stdafx.h"的下一行加入

extern "C" __declspec(dllexport) void detection (iplImage* pInpImg,CvHaarClassifierCascade * pCascade); 

/*

这是C格式导出函数;这种写法一般用在C++写的DLL中,指按C的规则导出这个函数,否则导出的函数会很怪;加上 extern "C" 表示按标准C格式导出函数.如果去掉仅兼容C++;其中 int fun(int a, int b) 这部分代码是我们想用 dll 实现的函数原型声明

如果还想加入其他的可以继续加入 extern "C" __declspec(dllexport) int fun1(int a, int b);

*/ 

DllMain 是 DLL 的默认入口函数,类似于C语言的main函数,该例子无需修改此处,在 DllMain 的后面加入:

void detection (IplImage* pInpImg,CvHaarClassifierCascade * pCascade)

{

     .......}

例子:(创建dll的例子)

因为里面用到OpenCV的东西,所以要在settings的Link里面加入:“cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib”我用的是opencv1.0

[html] view plain copy print?// object.cpp : Defines the entry point for the DLL application.  //    #include "stdafx.h"  #include "cv.h"  #include "highgui.h"    extern "C"_declspec(dllexport)void detection (IplImage* pInpImg,CvHaarClassifierCascade * pCascade);    BOOL APIENTRY DllMain( HANDLE hModule,                          DWORD  ul_reason_for_call,                          LPVOID lpReserved                       )  {      return TRUE;  }      void detection (IplImage* pInpImg,CvHaarClassifierCascade * pCascade)  {         CvSeq * pFaceRectSeq;         CvMemStorage * pStorage = 0;         pStorage = cvCreateMemStorage(0);           //修改图片的大小          IplImage * destImg;         destImg=cvCreateImage(cvSize(640,478),IPL_DEPTH_8U,3);         cvResize(pInpImg,destImg);            pFaceRectSeq = cvHaarDetectObjects(destImg,pCascade,pStorage,1.1,3,CV_HAAR_DO_CANNY_PRUNING,cvSize(20,20));                    for(int i=0;i<(pFaceRectSeq?pFaceRectSeq->total:0);i++)          {              CvRect * r = (CvRect*)cvGetSeqElem(pFaceRectSeq,i);              CvPoint pt1 = {r->x,r->y};              CvPoint pt2 = {r->x+r->width,r->y+r->height};              //CvPoint pt3 = {r->x+r->width/4,r->y+r->height/4};                            cvRectangle(destImg,pt1,pt2,CV_RGB(0,255,0),3,4,0);                        }          cvNamedWindow("object",CV_WINDOW_AUTOSIZE); /*若有它就报错,可能是杀毒软件这类保护软件的问题,关闭它们即可*/          cvShowImage("object",destImg);             //  cvWaitKey(0);            //      cvReleaseImage(&destImg);  //      cvReleaseImage(&pInpImg);  //      if(pStorage) cvReleaseMemStorage(&pStorage);  }        
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表