atl90: Add new DLL

Zhenbo Li litimetal at gmail.com
Wed Sep 4 07:03:31 CDT 2013


This patch could fix bug 34431, which is caused by missing atl90.dll

---
  configure              |  1 +
  configure.ac           |  1 +
  dlls/atl90/Makefile.in |  7 ++++
  dlls/atl90/atl90.c     | 93 
++++++++++++++++++++++++++++++++++++++++++++++++++
  dlls/atl90/atl90.spec  | 52 ++++++++++++++++++++++++++++
  include/atlbase.h      |  1 +
  tools/make_specfiles   |  1 +
  7 files changed, 156 insertions(+)
-------------- next part --------------
>From 97e567b74392a8f4ab21aff900cf625bc8e81ba1 Mon Sep 17 00:00:00 2001
From: Li Zhenbo <litimetal at gmail.com>
Date: Wed, 4 Sep 2013 17:23:49 +0800
Subject: atl90: Added new DLL.

---
 configure              |  1 +
 configure.ac           |  1 +
 dlls/atl90/Makefile.in |  7 ++++
 dlls/atl90/atl90.c     | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++
 dlls/atl90/atl90.spec  | 52 ++++++++++++++++++++++++++++
 include/atlbase.h      |  1 +
 tools/make_specfiles   |  1 +
 7 files changed, 156 insertions(+)
 create mode 100644 dlls/atl90/Makefile.in
 create mode 100644 dlls/atl90/atl90.c
 create mode 100644 dlls/atl90/atl90.spec

diff --git a/configure b/configure
index 3514c1d..5432cee 100755
--- a/configure
+++ b/configure
@@ -15916,6 +15916,7 @@ wine_fn_config_test dlls/atl100/tests atl100_test
 wine_fn_config_dll atl110 enable_atl110
 wine_fn_config_dll atl80 enable_atl80 implib
 wine_fn_config_test dlls/atl80/tests atl80_test
+wine_fn_config_dll atl90 enable_atl90
 wine_fn_config_dll authz enable_authz
 wine_fn_config_dll avicap32 enable_avicap32 implib
 wine_fn_config_dll avifil32 enable_avifil32 implib,po
diff --git a/configure.ac b/configure.ac
index 8306fe2..be30b2b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2598,6 +2598,7 @@ WINE_CONFIG_TEST(dlls/atl100/tests)
 WINE_CONFIG_DLL(atl110)
 WINE_CONFIG_DLL(atl80,,[implib])
 WINE_CONFIG_TEST(dlls/atl80/tests)
+WINE_CONFIG_DLL(atl90)
 WINE_CONFIG_DLL(authz)
 WINE_CONFIG_DLL(avicap32,,[implib])
 WINE_CONFIG_DLL(avifil32,,[implib,po])
diff --git a/dlls/atl90/Makefile.in b/dlls/atl90/Makefile.in
new file mode 100644
index 0000000..92b5d44
--- /dev/null
+++ b/dlls/atl90/Makefile.in
@@ -0,0 +1,7 @@
+MODULE    = atl90.dll
+IMPORTS   = atl100 oleaut32 user32 ole32
+EXTRADEFS = -D_ATL_VER=_ATL_VER_90
+
+C_SRCS = atl90.c
+
+ at MAKE_DLL_RULES@
diff --git a/dlls/atl90/atl90.c b/dlls/atl90/atl90.c
new file mode 100644
index 0000000..ce37bc8
--- /dev/null
+++ b/dlls/atl90/atl90.c
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2013 Zhenbo Li
+ *
+ * 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 <stdarg.h>
+#include <stdio.h>
+
+#define COBJMACROS
+
+#include "windef.h"
+#include "winbase.h"
+#include "winerror.h"
+#include "winuser.h"
+#include "atlbase.h"
+
+#include "wine/debug.h"
+#include "wine/unicode.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(atl);
+
+/***********************************************************************
+ *           AtlGetVersion              [atl90.@]
+ */
+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 AtlAxWin90[] = {'A','t','l','A','x','W','i','n','9','0',0};
+    const WCHAR AtlAxWinLic90[] = {'A','t','l','A','x','W','i','n','L','i','c','9','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 = AtlAxWin90;
+    if ( !RegisterClassExW( &wcex ) )
+        return FALSE;
+
+    wcex.lpszClassName = AtlAxWinLic90;
+    if ( !RegisterClassExW( &wcex ) )
+        return FALSE;
+
+    return TRUE;
+}
diff --git a/dlls/atl90/atl90.spec b/dlls/atl90/atl90.spec
new file mode 100644
index 0000000..aed22bd
--- /dev/null
+++ b/dlls/atl90/atl90.spec
@@ -0,0 +1,52 @@
+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
+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
+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
+67 stdcall AtlSetPerUserRegistration(long) atl100.AtlSetPerUserRegistration
+68 stdcall AtlGetPerUserRegistration(ptr) atl100.AtlGetPerUserRegistration
diff --git a/include/atlbase.h b/include/atlbase.h
index 660fbf5..bcd634e 100644
--- a/include/atlbase.h
+++ b/include/atlbase.h
@@ -28,6 +28,7 @@
 #define _ATL_VER_30  0x0300
 #define _ATL_VER_70  0x0700
 #define _ATL_VER_80  0x0800
+#define _ATL_VER_90  0x0900
 #define _ATL_VER_100 0x0a00
 #define _ATL_VER_110 0x0b00
 
diff --git a/tools/make_specfiles b/tools/make_specfiles
index c0de805..59c6930 100755
--- a/tools/make_specfiles
+++ b/tools/make_specfiles
@@ -118,6 +118,7 @@ my @dll_groups =
   "atl110",
   "atl",
   "atl80",
+  "atl90",
  ],
  [
   "advapi32",
-- 
1.8.2.1



More information about the wine-patches mailing list