/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_dbaccess.hxx" #ifndef __cplusplus #error Need C++ to compile #endif #define UNICODE #define _UNICODE #include #ifdef _MSC_VER #pragma warning(push, 1) #pragma warning(disable:4005) #endif #include #include #include #ifdef _MSC_VER #pragma warning(pop) #endif // the name of the library which contains the SQLManageDataSources function #define ODBC_UI_LIB_NAME L"ODBCCP32.DLL" // the signature of the SQLManageDataSources function typedef SQLRETURN (SQL_API* TSQLManageDataSource) (SQLHWND hwndParent); // displays the error text for the last error (GetLastError), and returns this error value int displayLastError() { DWORD dwError = GetLastError(); LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR)&lpMsgBuf, 0, NULL ); // Display the string. MessageBox( NULL, (LPCTSTR)lpMsgBuf, NULL, MB_OK | MB_ICONERROR ); // Free the buffer. LocalFree( lpMsgBuf ); return dwError; } /** registers the window class for our application's main window */ BOOL registerWindowClass( HINSTANCE _hAppInstance ) { WNDCLASSEX wcx; wcx.cbSize = sizeof(wcx); // size of structure wcx.style = CS_HREDRAW | CS_VREDRAW; // redraw if size changes wcx.lpfnWndProc = DefWindowProc; // points to window procedure wcx.cbClsExtra = 0; // no extra class memory wcx.cbWndExtra = 0; // no extra window memory wcx.hInstance = _hAppInstance; // handle to instance wcx.hIcon = NULL; // predefined app. icon wcx.hCursor = NULL; // predefined arrow wcx.hbrBackground = NULL; // no background brush wcx.lpszMenuName = NULL; // name of menu resource wcx.lpszClassName = L"ODBCConfigMainClass"; // name of window class wcx.hIconSm = NULL; // small class icon return ( NULL != RegisterClassEx( &wcx ) ); } /// initializes the application instances HWND initInstance( HINSTANCE _hAppInstance ) { HWND hWindow = CreateWindow( L"ODBCConfigMainClass", // name of window class L"ODBC Config Wrapper", // title-bar string WS_OVERLAPPEDWINDOW, // top-level window CW_USEDEFAULT, // default horizontal position CW_USEDEFAULT, // default vertical position CW_USEDEFAULT, // default width CW_USEDEFAULT, // default height (HWND) NULL, // no owner window (HMENU) NULL, // use class menu _hAppInstance, // handle to application instance (LPVOID) NULL); // no window-creation data // don't show the window, we only need it as parent handle for the // SQLManageDataSources function return hWindow; } // main window function #ifdef __MINGW32__ extern "C" int APIENTRY WinMain( HINSTANCE _hAppInstance, HINSTANCE, LPSTR, int ) #else extern "C" int APIENTRY _tWinMain( HINSTANCE _hAppInstance, HINSTANCE, LPTSTR, int ) #endif { if ( !registerWindowClass( _hAppInstance ) ) return FALSE; HWND hAppWindow = initInstance( _hAppInstance ); if ( !IsWindow( hAppWindow ) ) return displayLastError(); HMODULE hModule = LoadLibraryW( ODBC_UI_LIB_NAME ); if ( hModule == NULL ) hModule = LoadLibraryExW( ODBC_UI_LIB_NAME, NULL, LOAD_WITH_ALTERED_SEARCH_PATH ); if ( hModule == NULL ) return displayLastError(); FARPROC pManageDSProc = GetProcAddress( hModule, "SQLManageDataSources" ); if ( pManageDSProc == NULL ) return displayLastError(); TSQLManageDataSource pManageDS = (TSQLManageDataSource)pManageDSProc; if ( !( (*pManageDS)( hAppWindow ) ) ) return displayLastError(); FreeLibrary( hModule ); return 0; }