//找到打印信息的地方,按照道理,这个函数应该被调用了多次,继续找
————————————————————————————————————————————————————————
BOOL GetCPLAppletInfo(HWND hwndParent, LPTSTR pszPath, HIMAGELIST himlLarge, HIMAGELIST himlSmall)
{
HINSTANCE hinst = NULL;
APPLET_PROC lpfnCPL;
int i;
WORD cxMiniIcon = GetSystemMetrics(SM_CXSMICON);
WORD cyMiniIcon = GetSystemMetrics(SM_CYSMICON);
if( !(hinst = LoadLibrary(pszPath)) ||
!(lpfnCPL = (APPLET_PROC)GetProcAddress((HMODULE)hinst, c_szCplAppletFunc)) ) {
RETAILMSG(TRUE, (TEXT("CPL: Failed to load '%s'\r\n"), pszPath));//————打印出错信息
goto Error;
}
// Call CPL for Init
lpfnCPL(NULL, CPL_INIT, 0L, 0L);
for(i=0; i<(int)lpfnCPL(NULL, CPL_GETCOUNT, 0L, 0L); i++)
{
NEWCPLINFO Newcpl;
HICON hiconLG, hiconSM;
Newcpl.dwSize = 0L;
Newcpl.dwFlags = 0L;
if(lpfnCPL(NULL, CPL_NEWINQUIRE, i, (LONG)(LPCPLINFO)&Newcpl) == -1)
{
// This is expected & harmless--results from componentization
DEBUGMSG(DEBUG_NOISY, (TEXT("CPL: Failed CPL_NEWINQUIRE for DLL=%s applet %d\r\n"), pszPath, i));
continue;
}
if (Newcpl.dwSize != sizeof(NEWCPLINFO)) {
DEBUGMSG(ERROR_ZONE, (TEXT("CPL: Incompatible struct size from '%s'\r\n"), pszPath));
goto Error;
}
hiconLG = Newcpl.hIcon;
hiconSM = 0;
if (Newcpl.lData) // so a small icon can be loaded (we do not have CopyImage())
hiconSM = (HICON)LoadImage(hinst, MAKEINTRESOURCE(Newcpl.lData),
IMAGE_ICON, cxMiniIcon, cyMiniIcon, LR_DEFAULTCOLOR);
if (! hiconSM || hiconLG == (HICON) 1)
hiconSM = hiconLG;
if (!hiconLG) {
DEBUGMSG(ERROR_ZONE, (TEXT("No Icon found for CPL '%s', Applet '%s'\r\n"),pszPath, Newcpl.szName));
continue;
}else if (hiconLG == (HICON) 1) {
DEBUGMSG(DEBUG_NOISY, (TEXT("Icon=1. Continue...\r\n")));
continue;
}else {
if (ImageList_AddIcon(himlLarge, hiconLG) == -1 ||
ImageList_AddIcon(himlSmall, hiconSM) == -1) {
DEBUGMSG(ERROR_ZONE, (L"Error: Load icon for applet='%s' \r\n", Newcpl.szName));
goto Error;
}
}
DestroyIcon(hiconLG);
DestroyIcon(hiconSM);
if (!GetMoreMem())
goto Error;
rgAppletsData[nCPL_files].nApplet = i;
lstrcpy(rgAppletsData[nCPL_files].szAppletName, Newcpl.szName);
lstrcpy(rgAppletsData[nCPL_files].szDesc, Newcpl.szInfo);
lstrcpy(rgAppletsData[nCPL_files].szDllName, pszPath);
nCPL_files++;
lpfnCPL(NULL, CPL_STOP, i, Newcpl.lData);
DEBUGMSG(DEBUG_NOISY, (TEXT("Found applet='%s' index=%d dllpath=%s \r\n"), Newcpl.szName,nCPL_files, pszPath));
}
lpfnCPL(NULL, CPL_EXIT, 0L, 0L);
if (hinst) FreeLibrary(hinst);
return TRUE;
Error:
switch (GetLastError()) {
case ERROR_OUTOFMEMORY:
case ERROR_NOT_ENOUGH_MEMORY:
MessageBox(hwndParent, CELOADSZ(IDS_OUTOFMEMORY), CELOADSZ(IDS_TITLE), MB_OK|MB_ICONEXCLAMATION);
break;
}
return FALSE;
} 复制代码