STDAPI DllUnregisterServer(void) { return _Module.UnregisterServer(FALSE); }
virtual BOOL InitInstance() { #ifdef CRASH_HANDLER rde::CrashHandler::Init(); #endif // disable auto-rotate on tablets #if (WINVER <= 0x0601) SetDisplayAutoRotationPreferences = (pSDARP)GetProcAddress(GetModuleHandle(TEXT("user32.dll")), "SetDisplayAutoRotationPreferences"); if (SetDisplayAutoRotationPreferences) SetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE_LANDSCAPE); #else SetDisplayAutoRotationPreferences(ORIENTATION_PREFERENCE_LANDSCAPE); #endif g_hinst = theInstance; #if _WIN32_WINNT >= 0x0400 & defined(_ATL_FREE_THREADED) hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED); #else hRes = CoInitialize(NULL); #endif _ASSERTE(SUCCEEDED(hRes)); _Module.Init(ObjectMap, theInstance, &LIBID_VPinballLib); fFile = false; fPlay = false; fPov = false; bRun = true; int nRet = 0; memset(szTableFileName, 0, _MAX_PATH); // Start VP with file dialog open and then also playing that one? int stos; HRESULT hr = GetRegInt("Editor", "SelectTableOnStart", &stos); if (hr != S_OK) stos = 1; // The default = on if (stos) { fFile = true; fPlay = true; fPov = false; } int nArgs; LPSTR *szArglist = CommandLineToArgvA(GetCommandLine(), &nArgs); for (int i = 0; i < nArgs; ++i) { if (lstrcmpi(szArglist[i], _T("-h")) == 0 || lstrcmpi(szArglist[i], _T("/h")) == 0 || lstrcmpi(szArglist[i], _T("-Help")) == 0 || lstrcmpi(szArglist[i], _T("/Help")) == 0 || lstrcmpi(szArglist[i], _T("-?")) == 0 || lstrcmpi(szArglist[i], _T("/?")) == 0) { ShowError("-UnregServer Unregister VP functions\n-RegServer Register VP functions\n\n-DisableTrueFullscreen Force-disable True Fullscreen setting\n\n-Edit [filename] load file into VP\n-Play [filename] load and play file\n-Pov [filename] load, export pov and close"); bRun = false; break; } if (lstrcmpi(szArglist[i], _T("-UnregServer")) == 0 || lstrcmpi(szArglist[i], _T("/UnregServer")) == 0) { _Module.UpdateRegistryFromResource(IDR_VPINBALL, FALSE); nRet = _Module.UnregisterServer(TRUE); bRun = false; break; } if (lstrcmpi(szArglist[i], _T("-RegServer")) == 0 || lstrcmpi(szArglist[i], _T("/RegServer")) == 0) { _Module.UpdateRegistryFromResource(IDR_VPINBALL, TRUE); nRet = _Module.RegisterServer(TRUE); bRun = false; break; } disableTrueFullscreen |= (lstrcmpi(szArglist[i], _T("-DisableTrueFullscreen")) == 0 || lstrcmpi(szArglist[i], _T("/DisableTrueFullscreen")) == 0); const bool editfile = (lstrcmpi(szArglist[i], _T("-Edit")) == 0 || lstrcmpi(szArglist[i], _T("/Edit")) == 0); const bool playfile = (lstrcmpi(szArglist[i], _T("-Play")) == 0 || lstrcmpi(szArglist[i], _T("/Play")) == 0); const bool povfile = (lstrcmpi(szArglist[i], _T("-Pov")) == 0 || lstrcmpi(szArglist[i], _T("/Pov")) == 0); if ((editfile || playfile || povfile) && (i + 1 < nArgs)) { fFile = true; fPlay = playfile; fPov = povfile; // Remove leading - or / char* filename; if ((szArglist[i + 1][0] == '-') || (szArglist[i + 1][0] == '/')) filename = szArglist[i + 1] + 1; else filename = szArglist[i + 1]; // Remove " " if (filename[0] == '"') { strcpy_s(szTableFileName, filename + 1); szTableFileName[lstrlen(szTableFileName) - 1] = '\0'; } else strcpy_s(szTableFileName, filename); // Add current path char szLoadDir[MAX_PATH]; if (szTableFileName[1] != ':') { GetCurrentDirectory(MAX_PATH, szLoadDir); strcat_s(szLoadDir, "\\"); strcat_s(szLoadDir, szTableFileName); strcpy_s(szTableFileName, szLoadDir); } else // Or set from table path if (playfile) { PathFromFilename(szTableFileName, szLoadDir); SetCurrentDirectory(szLoadDir); } if (playfile || povfile) VPinball::SetOpenMinimized(); break; } } free(szArglist); // load and register VP type library for COM integration char szFileName[_MAX_PATH]; if (GetModuleFileName(theInstance, szFileName, _MAX_PATH)) { ITypeLib *ptl = NULL; MAKE_WIDEPTR_FROMANSI(wszFileName, szFileName); if (SUCCEEDED(LoadTypeLib(wszFileName, &ptl))) { // first try to register system-wide (if running as admin) hr = RegisterTypeLib(ptl, wszFileName, NULL); if (!SUCCEEDED(hr)) { // if failed, register only for current user hr = RegisterTypeLibForUser(ptl, wszFileName, NULL); if (!SUCCEEDED(hr)) MessageBox(0, "Could not register type library. Try running Visual Pinball as administrator.", "Error", MB_ICONWARNING); } ptl->Release(); } else MessageBox(0, "Could not load type library.", "Error", MB_ICONSTOP); } //SET_CRT_DEBUG_FIELD( _CRTDBG_LEAK_CHECK_DF ); return TRUE; }
STDAPI DllUnregisterServer(void) { _Module.UnregisterServer(); return S_OK; }
HRESULT OPCEngine::unregisterServer(void) { _TRACE(TL_INF, TG_ENG, (_T("unregister server"))); HRESULT res; { ICatRegister *cr; ICatInformation *ci = NULL ; IEnumCLSID* enumCLSID = NULL ; CATID catIDs[2]; CLSID clsid ; if (SUCCEEDED(res = ::CoCreateInstance(CLSID_StdComponentCategoriesMgr, NULL, CLSCTX_ALL, IID_ICatRegister, (void **)&cr))) { // unregister server in categories catIDs[0] = CATID_OPCDAServer10; catIDs[1] = CATID_OPCDAServer20; res = cr->UnRegisterClassImplCategories(g_clsid, 2, catIDs); _TRACE(TL_INF, TG_ENG, (_T("unregister component implementations [0x%X]"), res)); // check if this server was the last in the category if (SUCCEEDED(res = cr->QueryInterface(IID_ICatInformation, (void**)&ci))) { // OPC DA Server V1.0A if (SUCCEEDED (res = ci->EnumClassesOfCategories(1, &catIDs[0], 0, NULL, &enumCLSID))) { res = enumCLSID->Next(1, &clsid, NULL) ; // if result is S_FALSE, there no components are in this category, so remove it. if (res == S_FALSE) { // unregister the component category res = cr->UnRegisterCategories(1, &catIDs[0]) ; _TRACE(TL_INF, TG_ENG, (_T("unregister DA V1.0A component category [0x%X]"), res)); } enumCLSID->Release(); } // OPC DA Server V2.0 if (SUCCEEDED (res = ci->EnumClassesOfCategories(1, &catIDs[1], 0, NULL, &enumCLSID))) { res = enumCLSID->Next(1, &clsid, NULL) ; // if result is S_FALSE, there no components are in this category, so remove it. if (res == S_FALSE) { // unregister the component category res = cr->UnRegisterCategories(1, &catIDs[1]) ; _TRACE(TL_INF, TG_ENG, (_T("unregister DA V2.0 component category [0x%X]"), res)); } enumCLSID->Release(); } ci->Release(); } cr->Release(); } CRegKey key, keyCLSID; DWORD ret; if (ret = keyCLSID.Open(HKEY_CLASSES_ROOT, _T("CLSID")) == ERROR_SUCCESS) { USES_CONVERSION; LPOLESTR wszClsid; LPTSTR clsid; StringFromCLSID(g_clsid, &wszClsid); clsid = W2T(wszClsid); CoTaskMemFree(wszClsid); if (ret = key.Open(keyCLSID, clsid) == ERROR_SUCCESS) { key.RecurseDeleteKey(_T("Implemented Categories")); key.Close(); } else res = HRESULT_FROM_WIN32(ret); keyCLSID.Close(); } else res = HRESULT_FROM_WIN32(ret); } // unregister COM Server object res = _Module.UnregisterServer(); return res; } // unregisterServer
///////////////////////////////////////////////////////////////////////////// //++ // // DllUnregisterServer // // Description: // Removes entries from the system registry. // //-- ///////////////////////////////////////////////////////////////////////////// STDAPI DllUnregisterServer( void ) { return _Module.UnregisterServer( FALSE ); // FALSE => no typelib } //*** DllUnregisterServer
////////////////////////////////////////////////////////////////////////////// //++ // // DllUnRegisterServer // // Description: // Removes entries to the system registry // // Arguments: // None. // // Return Value: // S_OK Success // // Remarks: // None. // //-- ////////////////////////////////////////////////////////////////////////////// STDAPI DllUnregisterServer( void ) { return _Module.UnregisterServer( TRUE ); } //*** DllUnregisterServer