欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

MFC调用dll文件

程序员文章站 2022-06-24 21:57:09
...

在MFC中调用dll文件的代码如下:
其中值得注意的是,在if(MyImageProcess(showImg) == FALSE) 一句中,输入的变量最好使用全局变量,如果使用内部变量,在Debug模式下,函数结束后会出现debug assertion failed错误,Release下正常运行

//获取dll路径
    char strModlePath[256];
    GetModuleFileName(NULL,strModlePath, 256); //得到当前模块路径.输出的*.exe;
    char buf[1000];
    CString a = strModlePath; //将char赋值给CString
    a += "//..//";            //设置为当前工作路径为当时的上一级;
    a += "//..//";            //设置为当前工作路径为当时的上一级;
    SetCurrentDirectory(a);   //设置为当前路径;
    GetCurrentDirectory(1000,buf);
    a = buf;
    CString strDllPath = a + "\\Dll\\";
    CString strDllPathName = strDllPath + m_strFuncName + ".dll";


    typedef int(*ImageProcess)(Mat&);//调用函数模式,需要和dll中函数接口一致
    ImageProcess MyImageProcess;
    HINSTANCE hdll;
    hdll = LoadLibrary(strDllPathName); //加载动态链接库dll
    if(hdll == NULL)
    {
        MessageBox("无法加载动态链接库");
        FreeLibrary(hdll);
        return ;
    }
    MyImageProcess = (ImageProcess)GetProcAddress(hdll, m_strFuncName); //检索指定的动态链接库dll中的输出库函数地址
    if(MyImageProcess == NULL)
    {
        FreeLibrary(hdll);
        return ;
    }
    if(MyImageProcess(showImg) == FALSE) //运行算法
    {
        MessageBox("dll运行出错");
        FreeLibrary(hdll);
        return ;
    }
    else
    {
        if (!showImg.empty())
        {
            m_iplConvImg = showImg;//将Mat类型转换为IplImage类型,用于在控件中显示
            ShowImage(&m_iplConvImg);//显示图像
        }
        FreeLibrary(hdll);                  //释放动态链接库
        return ;
    }
相关标签: mfc