diff --git a/reactos/dll/win32/CMakeLists.txt b/reactos/dll/win32/CMakeLists.txt index acdf633d640..5158802b67c 100644 --- a/reactos/dll/win32/CMakeLists.txt +++ b/reactos/dll/win32/CMakeLists.txt @@ -7,6 +7,7 @@ add_subdirectory(advapi32) add_subdirectory(advpack) add_subdirectory(atl) add_subdirectory(atl100) +add_subdirectory(atl80) add_subdirectory(authz) add_subdirectory(avicap32) add_subdirectory(avifil32) diff --git a/reactos/dll/win32/atl80/CMakeLists.txt b/reactos/dll/win32/atl80/CMakeLists.txt new file mode 100644 index 00000000000..ca123ea0e84 --- /dev/null +++ b/reactos/dll/win32/atl80/CMakeLists.txt @@ -0,0 +1,17 @@ + +add_definitions( + -D__WINESRC__ + -D_ATL_VER=_ATL_VER_80) + +spec2def(atl80.dll atl80.spec) + +list(APPEND SOURCE + atl80.c + ${CMAKE_CURRENT_BINARY_DIR}/atl80_stubs.c + ${CMAKE_CURRENT_BINARY_DIR}/atl80.def) + +add_library(atl80 SHARED ${SOURCE}) +set_module_type(atl80 win32dll) +target_link_libraries(atl80 wine) +add_importlibs(atl80 atl100 oleaut32 user32 ole32 msvcrt kernel32 ntdll) +add_cd_file(TARGET atl80 DESTINATION reactos/system32 FOR all) diff --git a/reactos/dll/win32/atl80/atl80.c b/reactos/dll/win32/atl80/atl80.c new file mode 100644 index 00000000000..bad49b23d15 --- /dev/null +++ b/reactos/dll/win32/atl80/atl80.c @@ -0,0 +1,152 @@ +/* + * Copyright 2012 Stefan Leichter + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include + +#define COBJMACROS + +#include +#include +#include +#include +#include + +#include +#include + +WINE_DEFAULT_DEBUG_CHANNEL(atl); + +/*********************************************************************** + * AtlRegisterTypeLib [atl80.18] + */ +HRESULT WINAPI AtlComModuleRegisterServer(_ATL_COM_MODULE *mod, BOOL bRegTypeLib, const CLSID *clsid) +{ + const struct _ATL_CATMAP_ENTRY *catmap; + _ATL_OBJMAP_ENTRY **iter; + HRESULT hres; + + TRACE("(%p %x %s)\n", mod, bRegTypeLib, debugstr_guid(clsid)); + + for(iter = mod->m_ppAutoObjMapFirst; iter < mod->m_ppAutoObjMapLast; iter++) { + if(!*iter || (clsid && !IsEqualCLSID((*iter)->pclsid, clsid))) + continue; + + TRACE("Registering clsid %s\n", debugstr_guid((*iter)->pclsid)); + hres = (*iter)->pfnUpdateRegistry(TRUE); + if(FAILED(hres)) + return hres; + + catmap = (*iter)->pfnGetCategoryMap(); + if(catmap) { + hres = AtlRegisterClassCategoriesHelper((*iter)->pclsid, catmap, TRUE); + if(FAILED(hres)) + return hres; + } + } + + if(bRegTypeLib) { + hres = AtlRegisterTypeLib(mod->m_hInstTypeLib, NULL); + if(FAILED(hres)) + return hres; + } + + return S_OK; +} + +/*********************************************************************** + * AtlRegisterTypeLib [atl80.19] + */ +HRESULT WINAPI AtlRegisterTypeLib(HINSTANCE inst, const WCHAR *index) +{ + ITypeLib *typelib; + BSTR path; + HRESULT hres; + + TRACE("(%p %s)\n", inst, debugstr_w(index)); + + hres = AtlLoadTypeLib(inst, index, &path, &typelib); + if(FAILED(hres)) + return hres; + + hres = RegisterTypeLib(typelib, path, NULL); /* FIXME: pass help directory */ + ITypeLib_Release(typelib); + SysFreeString(path); + return hres; +} + +/*********************************************************************** + * AtlGetVersion [atl80.@] + */ +DWORD WINAPI AtlGetVersion(void *pReserved) +{ + return _ATL_VER; +} + +/********************************************************************** + * AtlAxWin class window procedure + */ +static LRESULT CALLBACK AtlAxWin_wndproc( HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam ) +{ + if ( wMsg == WM_CREATE ) + { + DWORD len = GetWindowTextLengthW( hWnd ) + 1; + WCHAR *ptr = HeapAlloc( GetProcessHeap(), 0, len*sizeof(WCHAR) ); + if (!ptr) + return 1; + GetWindowTextW( hWnd, ptr, len ); + AtlAxCreateControlEx( ptr, hWnd, NULL, NULL, NULL, NULL, NULL ); + HeapFree( GetProcessHeap(), 0, ptr ); + return 0; + } + return DefWindowProcW( hWnd, wMsg, wParam, lParam ); +} + +BOOL WINAPI AtlAxWinInit(void) +{ + WNDCLASSEXW wcex; + const WCHAR AtlAxWin80[] = {'A','t','l','A','x','W','i','n','8','0',0}; + const WCHAR AtlAxWinLic80[] = {'A','t','l','A','x','W','i','n','L','i','c','8','0',0}; + + FIXME("semi-stub\n"); + + if ( FAILED( OleInitialize(NULL) ) ) + return FALSE; + + wcex.cbSize = sizeof(wcex); + wcex.style = CS_GLOBALCLASS | CS_DBLCLKS; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = GetModuleHandleW( NULL ); + wcex.hIcon = NULL; + wcex.hCursor = NULL; + wcex.hbrBackground = NULL; + wcex.lpszMenuName = NULL; + wcex.hIconSm = 0; + + wcex.lpfnWndProc = AtlAxWin_wndproc; + wcex.lpszClassName = AtlAxWin80; + if ( !RegisterClassExW( &wcex ) ) + return FALSE; + + wcex.lpszClassName = AtlAxWinLic80; + if ( !RegisterClassExW( &wcex ) ) + return FALSE; + + return TRUE; +} diff --git a/reactos/dll/win32/atl80/atl80.spec b/reactos/dll/win32/atl80/atl80.spec new file mode 100644 index 00000000000..5a77629eea1 --- /dev/null +++ b/reactos/dll/win32/atl80/atl80.spec @@ -0,0 +1,53 @@ +10 stdcall AtlAdvise(ptr ptr ptr ptr) atl100.AtlAdvise +11 stdcall AtlUnadvise(ptr ptr long) atl100.AtlUnadvise +12 stdcall AtlFreeMarshalStream(ptr) atl100.AtlFreeMarshalStream +13 stdcall AtlMarshalPtrInProc(ptr ptr ptr) atl100.AtlMarshalPtrInProc +14 stdcall AtlUnmarshalPtr(ptr ptr ptr) atl100.AtlUnmarshalPtr +15 stdcall AtlComModuleGetClassObject(ptr ptr ptr ptr) atl100.AtlComModuleGetClassObject +17 stdcall AtlComModuleRegisterClassObjects(ptr long long) atl100.AtlComModuleRegisterClassObjects +18 stdcall AtlComModuleRegisterServer(ptr long ptr) +19 stdcall AtlRegisterTypeLib(ptr wstr) +20 stub AtlComModuleRevokeClassObjects +22 stdcall AtlComModuleUnregisterServer(ptr long ptr) atl100.AtlComModuleUnregisterServer +23 stdcall AtlUpdateRegistryFromResourceD(long wstr long ptr ptr) atl100.AtlUpdateRegistryFromResourceD +24 stdcall AtlWaitWithMessageLoop(long) atl100.AtlWaitWithMessageLoop +25 stub AtlSetErrorInfo +26 stdcall AtlCreateTargetDC(long ptr) atl100.AtlCreateTargetDC +27 stdcall AtlHiMetricToPixel(ptr ptr) atl100.AtlHiMetricToPixel +28 stdcall AtlPixelToHiMetric(ptr ptr) atl100.AtlPixelToHiMetric +29 stub AtlDevModeW2A +30 stdcall AtlComPtrAssign(ptr ptr) atl100.AtlComPtrAssign +31 stdcall AtlComQIPtrAssign(ptr ptr ptr) atl100.AtlComQIPtrAssign +32 stdcall AtlInternalQueryInterface(ptr ptr ptr ptr) atl100.AtlInternalQueryInterface +34 stdcall AtlGetVersion(ptr) +35 stdcall AtlAxDialogBoxW(long wstr long ptr long) atl100.AtlAxDialogBoxW +36 stdcall AtlAxDialogBoxA(long str long ptr long) atl100.AtlAxDialogBoxA +37 stdcall AtlAxCreateDialogW(long wstr long ptr long) atl100.AtlAxCreateDialogW +38 stdcall AtlAxCreateDialogA(long str long ptr long) atl100.AtlAxCreateDialogA +39 stdcall AtlAxCreateControl(ptr ptr ptr ptr) atl100.AtlAxCreateControl +40 stdcall AtlAxCreateControlEx(ptr ptr ptr ptr ptr ptr ptr) atl100.AtlAxCreateControlEx +41 stdcall AtlAxAttachControl(ptr ptr ptr) atl100.AtlAxAttachControl +42 stdcall AtlAxWinInit() +43 stdcall AtlWinModuleAddCreateWndData(ptr ptr ptr) atl100.AtlWinModuleAddCreateWndData +44 stdcall AtlWinModuleExtractCreateWndData(ptr) atl100.AtlWinModuleExtractCreateWndData +45 stub AtlWinModuleRegisterWndClassInfoW +46 stub AtlWinModuleRegisterWndClassInfoA +47 stdcall AtlAxGetControl(long ptr) atl100.AtlAxGetControl +48 stdcall AtlAxGetHost(long ptr) atl100.AtlAxGetHost +49 stdcall AtlRegisterClassCategoriesHelper(ptr ptr long) atl100.AtlRegisterClassCategoriesHelper +50 stdcall AtlIPersistStreamInit_Load(ptr ptr ptr ptr) atl100.AtlIPersistStreamInit_Load +51 stdcall AtlIPersistStreamInit_Save(ptr long ptr ptr ptr) atl100.AtlIPersistStreamInit_Save +52 stdcall AtlIPersistPropertyBag_Load(ptr ptr ptr ptr ptr) atl100.AtlIPersistPropertyBag_Load +53 stub AtlIPersistPropertyBag_Save +54 stdcall AtlGetObjectSourceInterface(ptr ptr ptr ptr ptr) atl100.AtlGetObjectSourceInterface +55 stub AtlUnRegisterTypeLib +56 stdcall AtlLoadTypeLib(long wstr ptr ptr) atl100.AtlLoadTypeLib +58 stdcall AtlModuleAddTermFunc(ptr ptr long) atl100.AtlModuleAddTermFunc +59 stub AtlAxCreateControlLic +60 stub AtlAxCreateControlLicEx +61 stdcall AtlCreateRegistrar(ptr) atl100.AtlCreateRegistrar +62 stub AtlWinModuleRegisterClassExW +63 stub AtlWinModuleRegisterClassExA +64 stdcall AtlCallTermFunc(ptr) atl100.AtlCallTermFunc +65 stdcall AtlWinModuleInit(ptr) atl100.AtlWinModuleInit +66 stub AtlWinModuleTerm diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE index cfbd947be58..1b026b4685c 100644 --- a/reactos/media/doc/README.WINE +++ b/reactos/media/doc/README.WINE @@ -52,6 +52,7 @@ reactos/dll/win32/actxprxy # Synced to Wine-1.5.26 reactos/dll/win32/advpack # Synced to Wine-1.7.1 reactos/dll/win32/atl # Synced to Wine-1.5.19 reactos/dll/win32/atl100 # Synced to Wine-1.7.1 +reactos/dll/win32/atl80 # Synced to Wine-1.7.1 reactos/dll/win32/avifil32 # Synced to Wine-1.5.26 reactos/dll/win32/bcrypt # Synced to Wine-1.5.26 reactos/dll/win32/browseui # Out of sync