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 ;
}