我用c++编写了一个dll,用于程控一些板卡。dll中设置了遇错退出机制,当遇到板卡操作错误时,调用ExitProcess函数退出dll,但是该函数运行之后,调用dll的main主函数不在运行dll调用语句之后的操作,直接退出,求问各位这是为什么?
调用dll部分代码如下:
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hdll;
Dllfun backend_dll;
hdll=LoadLibrary(_T("backend.dll"));
if(hdll==NULL)
{
FreeLibrary(hdll);
}
backend_dll=(Dllfun)GetProcAddress(hdll,"backend");
if(backend_dll==NULL)
{
FreeLibrary(hdll);
}
int result = backend_dll("test.txt");//这里进入dll,运行ExitProcess后,不会运行下一步语句,直接退出
int m = 100;
FreeLibrary(hdll);
return 0;
}
dll没啥要退出的啊。最多释放申请的资源就行。ExitProcess是退出进程,dll又不是进程,所以退出的是调用动态库的进程。把ExitProcess去掉
就是我在dll文件中,编写了很多检查函数,这些函数内部有层层调用了其他类中的函数,在类的函数中监控到某一文件中写入了“END”,此时想直接退出dll,而不是通过层层return,然后在dll的主函数中通过判断再去return,伪代码如下:
extern "C" __declspec(dllexport) int backend(char* TempFullPath)
{
int flag = 0;
……
CheckIsError()//检查某一错误
/*CheckIsError函数代码为
void CheckIsError()
{
Class1.CheckError1();
//CheckError1代码为
void CheckError1()
{
Class2.CheckError2();
//此时若在CheckError2中发现了错误,想直接退出dll,有什么办法吗?
//不想通过return false的方式层层反馈,因为还有很多地方需要如此错误,代码修改工程量较大
}
}
*/
return flag;
}