void CGDSApp::GetALLInterfaces(const CString& pathName, DLLTYPE type) {//@CODE_3649 HINSTANCE dllHandle; GETDLLVERSION GetDLLVersion; GETDLLINTERFACE GetDLLInterface; CString Mess; DWORD version; CDLLInterface *ri; // try loading the dll here dllHandle = AfxLoadLibrary(pathName); if (dllHandle == NULL) { LPVOID lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL); // Display the string. Mess.Format(_T("Error Loading DLL:%s\n%s\n"), pathName, lpMsgBuf); MessageBox(NULL, Mess, "Error", MB_OK | MB_ICONINFORMATION ); // Free the buffer. LocalFree( lpMsgBuf ); return; } // make sure this dll is ok GetDLLVersion = (GETDLLVERSION)GetProcAddress(dllHandle, _T("GetDLLVersion")); GetDLLInterface = (GETDLLINTERFACE)GetProcAddress(dllHandle, _T("GetDLLInterface")); if ((GetDLLVersion == NULL) || (GetDLLInterface == NULL)) { Mess.Format(_T("Unable to load %s\n" "Unable to locate either init or version function.\n"), pathName); MessageBox(NULL, Mess, _T("DLL Load Error!"), MB_OK | MB_ICONINFORMATION); AfxFreeLibrary(dllHandle); return; } version = (*GetDLLVersion)(); if (version != INTERFACEDLLVERSION) { Mess.Format(_T("Unable to load %s\n" "version %x doesn't match expected %x.\n"), pathName, version, INTERFACEDLLVERSION); MessageBox(NULL, Mess, _T("DLL Load Error!"),MB_OK | MB_ICONINFORMATION); FreeLibrary(dllHandle); return; } ri = GetDLLInterface(m_ProgramInfo); if (ri == NULL) { Mess.Format(_T("Unable to load %s\n" "GetDLLInterface routine failed.\n"), pathName); MessageBox(NULL, Mess, _T("DLL Load Error!"), MB_OK | MB_ICONINFORMATION); AfxFreeLibrary(dllHandle); return; } if (ri->m_Priority == 0) { gLogger->Print(_T("Priority should have been set in %s::GetDLLInterface()"), pathName); } ri->m_Type = type; m_DLLHandles.push_back(dllHandle); m_DLLS.push_back(ri); }//@CODE_3649
void VBA::winSetLanguageOption(int option, bool force) { if(((option == languageOption) && option != 2) && !force) return; switch(option) { case 0: { char lbuffer[10]; if(GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_SABBREVLANGNAME, lbuffer, 10)) { HINSTANCE l = winLoadLanguage(lbuffer); if(l == NULL) { LCID locIdBase = MAKELCID( MAKELANGID( PRIMARYLANGID( GetSystemDefaultLangID() ), SUBLANG_NEUTRAL ), SORT_DEFAULT ); if(GetLocaleInfo(locIdBase, LOCALE_SABBREVLANGNAME, lbuffer, 10)) { l = winLoadLanguage(lbuffer); if(l == NULL) { //printErrorMessage(IDS_FAILED_TO_LOAD_LIBRARY, //"Failed to load library %s", //lbuffer); return; } } } AfxSetResourceHandle(l); if(languageModule != NULL) #ifdef _AFXDLL AfxFreeLibrary( languageModule ); #else FreeLibrary( languageModule ); #endif languageModule = l; } else { //printErrorMessage(IDS_FAILED_TO_GET_LOCINFO, //"Failed to get locale information"); return; } } break; case 1: if(languageModule != NULL) #ifdef _AFXDLL AfxFreeLibrary( languageModule ); #else FreeLibrary( languageModule ); #endif languageModule = NULL; AfxSetResourceHandle(AfxGetInstanceHandle()); break; case 2: { if(!force) { LangSelect dlg; if(dlg.DoModal()) { HINSTANCE l = winLoadLanguage(languageName); if(l == NULL) { //printErrorMessage(IDS_FAILED_TO_LOAD_LIBRARY, //"Failed to load library %s", //languageName); return; } AfxSetResourceHandle(l); if(languageModule != NULL) { #ifdef _AFXDLL AfxFreeLibrary( languageModule ); #else FreeLibrary( languageModule ); #endif } languageModule = l; } } else { if(languageName.IsEmpty()) return; HINSTANCE l = winLoadLanguage(languageName); if(l == NULL) { //printErrorMessage(IDS_FAILED_TO_LOAD_LIBRARY, //"Failed to load library %s", //languageName); return; } AfxSetResourceHandle(l); if(languageModule != NULL) FreeLibrary(languageModule); languageModule = l; } } break; } languageOption = option; updateMenuBar(); }
int winVideoModeSelect(CWnd *pWnd, GUID **guid) { #ifdef _AFXDLL HINSTANCE h = AfxLoadLibrary("ddraw.dll"); #else HMODULE h = LoadLibrary( _T("ddraw.dll") ); #endif // If ddraw.dll doesn't exist in the search path, // then DirectX probably isn't installed, so fail. if (!h) return -1; gDriverCnt = 0; // Note that you must know which version of the // function to retrieve (see the following text). // For this example, we use the ANSI version. LPDIRECTDRAWENUMERATEEX lpDDEnumEx; lpDDEnumEx = (LPDIRECTDRAWENUMERATEEX) GetProcAddress(h,"DirectDrawEnumerateExA"); // If the function is there, call it to enumerate all display // devices attached to the desktop, and any non-display DirectDraw // devices. if (lpDDEnumEx) lpDDEnumEx(DDEnumCallbackEx, NULL, DDENUM_ATTACHEDSECONDARYDEVICES | DDENUM_NONDISPLAYDEVICES ); else { /* * We must be running on an old version of DirectDraw. * Therefore MultiMon isn't supported. Fall back on * DirectDrawEnumerate to enumerate standard devices on a * single-monitor system. */ BOOL (WINAPI *lpDDEnum)(LPDDENUMCALLBACK, LPVOID); lpDDEnum = (BOOL (WINAPI *)(LPDDENUMCALLBACK, LPVOID)) GetProcAddress(h, "DirectDrawEnumerateA"); if(lpDDEnum) lpDDEnum(DDEnumCallback,NULL); /* Note that it could be handy to let the OldCallback function * be a wrapper for a DDEnumCallbackEx. * * Such a function would look like: * BOOL FAR PASCAL OldCallback(GUID FAR *lpGUID, * LPSTR pDesc, * LPSTR pName, * LPVOID pContext) * { * return Callback(lpGUID,pDesc,pName,pContext,NULL); * } */ } int selected = 0; if(gDriverCnt > 1) { VideoDriverSelect d(pWnd); INT_PTR selected = d.DoModal(); if(selected == -1) { #ifdef _AFXDLL AfxFreeLibrary( h ); #else FreeLibrary( h ); #endif return -1; } } HRESULT (WINAPI *DDrawCreateEx)(GUID *,LPVOID *,REFIID,IUnknown *); DDrawCreateEx = (HRESULT (WINAPI *)(GUID *,LPVOID *,REFIID,IUnknown *)) GetProcAddress(h, "DirectDrawCreateEx"); LPDIRECTDRAW7 ddraw = NULL; if(DDrawCreateEx) { HRESULT hret = DDrawCreateEx(Drivers[selected].pGUID, (void **)&ddraw, IID_IDirectDraw7, NULL); if(hret != DD_OK) { systemMessage(0, "Error during DirectDrawCreateEx: %08x", hret); #ifdef _AFXDLL AfxFreeLibrary( h ); #else FreeLibrary( h ); #endif return -1; } } else { // should not happen.... systemMessage(0, "Error getting DirectDrawCreateEx"); #ifdef _AFXDLL AfxFreeLibrary( h ); #else FreeLibrary( h ); #endif return -1; } VideoMode dlg(ddraw, pWnd); INT_PTR res = dlg.DoModal(); if(res != -1) { *guid = Drivers[selected].pGUID; } ddraw->Release(); ddraw = NULL; // If the library was loaded by calling LoadLibrary(), // then you must use FreeLibrary() to let go of it. #ifdef _AFXDLL AfxFreeLibrary( h ); #else FreeLibrary( h ); #endif return (int)res; }