下面我自己给顺一边,问题也提出来,看看我理解的对不对,问题请高手帮我解释!
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)\\为什么\\lpReserved参数要给取消?
{
if (dwReason == DLL_PROCESS_ATTACH)\\判断是否连接上了DLL进程
{
char pszLoader[MAX_PATH];
char * pLowStr;
GetModuleFileName(NULL, pszLoader, MAX_PATH);\\请问:这句的含义是什么?\\ 我 查过帮助了,但还是有点不理解。
pLowStr=CharLower(pszLoader);\\把字母全部小写
if (strstr(pLowStr, "explorer.exe")!=NULL)\\比较pLowStr是否是\\ explorer.exe 如果是返回FALSE
return FALSE;
HANDLE hMutex=CreateMutex(NULL,TRUE,"IEXPLORE"); \\创建互斥,但这里我不知\\道创建和谁的互斥,是和IEXPLORE的互斥吗?CreateMutex()第二个函数TRUE的含义是什么?
if(hMutex==NULL||GetLastError() == ERROR_ALREADY_EXISTS)\\判断上句创建是\\否成功,如果没有成功,执行大括号里面的语句。
{
// 程序已经运行
CloseHandle(hMutex);
return FALSE;
}
请问各位高手上面这段程序我的解释基本合理吗?我还有很多的不明白的地方,恳求各位的帮助,不明白的地方也已经写在上面了。就是下面这段程序,不明白的地方我标在最后面,高手们指点!
STDAPI DllCanUnloadNow(void)
{
return (_Module.GetLockCount()==0) ? S_OK : S_FALSE;
}
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
return _Module.GetClassObject(rclsid, riid, ppv);
}
STDAPI DllRegisterServer(void)
{
return _Module.RegisterServer(TRUE);
}
STDAPI DllUnregisterServer(void)
{
return _Module.UnregisterServer(TRUE);
}晴问:STDAPI的定义是什么东西?这些都是自定义的函数吗?如果是的话,为什么没有函数内容,只有一个返回?返回的东西事什么?_Module.代表了什么,这里每个函数的用了很多,是个不经常使用的函数吗?请教!
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)\\为什么\\lpReserved参数要给取消?
{
if (dwReason == DLL_PROCESS_ATTACH)\\判断是否连接上了DLL进程
{
char pszLoader[MAX_PATH];
char * pLowStr;
GetModuleFileName(NULL, pszLoader, MAX_PATH);\\请问:这句的含义是什么?\\ 我 查过帮助了,但还是有点不理解。
pLowStr=CharLower(pszLoader);\\把字母全部小写
if (strstr(pLowStr, "explorer.exe")!=NULL)\\比较pLowStr是否是\\ explorer.exe 如果是返回FALSE
return FALSE;
HANDLE hMutex=CreateMutex(NULL,TRUE,"IEXPLORE"); \\创建互斥,但这里我不知\\道创建和谁的互斥,是和IEXPLORE的互斥吗?CreateMutex()第二个函数TRUE的含义是什么?
if(hMutex==NULL||GetLastError() == ERROR_ALREADY_EXISTS)\\判断上句创建是\\否成功,如果没有成功,执行大括号里面的语句。
{
// 程序已经运行
CloseHandle(hMutex);
return FALSE;
}
请问各位高手上面这段程序我的解释基本合理吗?我还有很多的不明白的地方,恳求各位的帮助,不明白的地方也已经写在上面了。就是下面这段程序,不明白的地方我标在最后面,高手们指点!
STDAPI DllCanUnloadNow(void)
{
return (_Module.GetLockCount()==0) ? S_OK : S_FALSE;
}
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)
{
return _Module.GetClassObject(rclsid, riid, ppv);
}
STDAPI DllRegisterServer(void)
{
return _Module.RegisterServer(TRUE);
}
STDAPI DllUnregisterServer(void)
{
return _Module.UnregisterServer(TRUE);
}晴问:STDAPI的定义是什么东西?这些都是自定义的函数吗?如果是的话,为什么没有函数内容,只有一个返回?返回的东西事什么?_Module.代表了什么,这里每个函数的用了很多,是个不经常使用的函数吗?请教!
如:
STDAPI DllRegisterServer()
STDAPI包括返回类型和调用规范。要注意STDAPI不能和__declspec(dllexport)一起使用,
因为STDAPI的扩展。输出必须使用.DEF文件。
当然是为了被多次加载。
CreateMutex是创建互斥量,目的是为防止程序多重运行。
其中,"IEXPLORE"是一个字符标记,当下次程序创建时,会和先前建立的互斥量的字符标记比较,如果相同,那么表示探测到了互斥,从而可以有效阻止程序再次被启动。 在这里目的是为防止该DLL被多次加载。