Move IUnknown implementation to the separate files

IUnknown interface is used sometimes (e.g. in WinRT implementation of
wxNotificationMessage) alone, without other OLE routines, so it is
helpful to have its code in the separate file to avoid coupling with main
OLE code when only IUnknown implementation is required.
This commit is contained in:
Artur Wieczorek 2017-05-09 16:50:14 +02:00
parent 208d98f5dc
commit 8d03282378
15 changed files with 515 additions and 301 deletions

View File

@ -2210,6 +2210,7 @@ COND_PLATFORM_WIN32_1_GTK_PLATFORM_HDR = \
wx/generic/caret.h \
wx/generic/imaglist.h \
wx/msw/ole/automtn.h \
wx/msw/ole/comimpl.h \
wx/msw/ole/oleutils.h \
wx/msw/ole/safearray.h \
wx/msw/ole/uuid.h \
@ -3132,6 +3133,7 @@ COND_TOOLKIT_MSW_GUI_HDR = \
wx/msw/msvcrt.h \
wx/msw/notebook.h \
wx/msw/ole/access.h \
wx/msw/ole/comimpl.h \
wx/msw/ole/dataform.h \
wx/msw/ole/dataobj.h \
wx/msw/ole/dataobj2.h \
@ -4943,6 +4945,7 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS = \
monodll_msw_imaglist.o \
monodll_msw_minifram.o \
monodll_msw_nonownedwnd.o \
monodll_comimpl.o \
monodll_ole_dataobj.o \
monodll_dropsrc.o \
monodll_droptgt.o \
@ -5649,6 +5652,7 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_1 = \
monodll_msw_imaglist.o \
monodll_msw_minifram.o \
monodll_msw_nonownedwnd.o \
monodll_comimpl.o \
monodll_ole_dataobj.o \
monodll_dropsrc.o \
monodll_droptgt.o \
@ -6966,6 +6970,7 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_2 = \
monolib_msw_imaglist.o \
monolib_msw_minifram.o \
monolib_msw_nonownedwnd.o \
monolib_comimpl.o \
monolib_ole_dataobj.o \
monolib_dropsrc.o \
monolib_droptgt.o \
@ -7672,6 +7677,7 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_3 = \
monolib_msw_imaglist.o \
monolib_msw_minifram.o \
monolib_msw_nonownedwnd.o \
monolib_comimpl.o \
monolib_ole_dataobj.o \
monolib_dropsrc.o \
monolib_droptgt.o \
@ -9133,6 +9139,7 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_4 = \
coredll_msw_imaglist.o \
coredll_msw_minifram.o \
coredll_msw_nonownedwnd.o \
coredll_comimpl.o \
coredll_ole_dataobj.o \
coredll_dropsrc.o \
coredll_droptgt.o \
@ -9839,6 +9846,7 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_5 = \
coredll_msw_imaglist.o \
coredll_msw_minifram.o \
coredll_msw_nonownedwnd.o \
coredll_comimpl.o \
coredll_ole_dataobj.o \
coredll_dropsrc.o \
coredll_droptgt.o \
@ -10606,6 +10614,7 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_6 = \
corelib_msw_imaglist.o \
corelib_msw_minifram.o \
corelib_msw_nonownedwnd.o \
corelib_comimpl.o \
corelib_ole_dataobj.o \
corelib_dropsrc.o \
corelib_droptgt.o \
@ -11312,6 +11321,7 @@ COND_TOOLKIT_MSW___LOWLEVEL_SRC_OBJECTS_7 = \
corelib_msw_imaglist.o \
corelib_msw_minifram.o \
corelib_msw_nonownedwnd.o \
corelib_comimpl.o \
corelib_ole_dataobj.o \
corelib_dropsrc.o \
corelib_droptgt.o \
@ -13355,6 +13365,7 @@ COND_PLATFORM_WIN32_1___GTK_PLATFORM_SRC_OBJECTS = \
monodll_generic_caret.o \
monodll_generic_imaglist.o \
monodll_automtn.o \
monodll_comimpl.o \
monodll_oleutils.o \
monodll_safearray.o \
monodll_uuid.o \
@ -13499,6 +13510,7 @@ COND_PLATFORM_WIN32_1___GTK_PLATFORM_SRC_OBJECTS_17 = \
monolib_generic_caret.o \
monolib_generic_imaglist.o \
monolib_automtn.o \
monolib_comimpl.o \
monolib_oleutils.o \
monolib_safearray.o \
monolib_uuid.o \
@ -13643,6 +13655,7 @@ COND_PLATFORM_WIN32_1___GTK_PLATFORM_SRC_OBJECTS_1_1 = \
coredll_generic_caret.o \
coredll_generic_imaglist.o \
coredll_automtn.o \
coredll_comimpl.o \
coredll_oleutils.o \
coredll_safearray.o \
coredll_uuid.o \
@ -13772,6 +13785,7 @@ COND_PLATFORM_WIN32_1___GTK_PLATFORM_SRC_OBJECTS_1_4 = \
corelib_generic_caret.o \
corelib_generic_imaglist.o \
corelib_automtn.o \
corelib_comimpl.o \
corelib_oleutils.o \
corelib_safearray.o \
corelib_uuid.o \
@ -17607,6 +17621,15 @@ monodll_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONODLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@monodll_automtn.o: $(srcdir)/src/msw/ole/automtn.cpp $(MONODLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/ole/automtn.cpp
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@monodll_comimpl.o: $(srcdir)/src/msw/ole/comimpl.cpp $(MONODLL_ODEP)
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/ole/comimpl.cpp
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1@monodll_comimpl.o: $(srcdir)/src/msw/ole/comimpl.cpp $(MONODLL_ODEP)
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/ole/comimpl.cpp
@COND_TOOLKIT_MSW_USE_GUI_1@monodll_comimpl.o: $(srcdir)/src/msw/ole/comimpl.cpp $(MONODLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/ole/comimpl.cpp
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@monodll_oleutils.o: $(srcdir)/src/msw/ole/oleutils.cpp $(MONODLL_ODEP)
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(MONODLL_CXXFLAGS) $(srcdir)/src/msw/ole/oleutils.cpp
@ -22458,6 +22481,15 @@ monolib_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp $(MONOLIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@monolib_automtn.o: $(srcdir)/src/msw/ole/automtn.cpp $(MONOLIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/ole/automtn.cpp
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@monolib_comimpl.o: $(srcdir)/src/msw/ole/comimpl.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/ole/comimpl.cpp
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1@monolib_comimpl.o: $(srcdir)/src/msw/ole/comimpl.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/ole/comimpl.cpp
@COND_TOOLKIT_MSW_USE_GUI_1@monolib_comimpl.o: $(srcdir)/src/msw/ole/comimpl.cpp $(MONOLIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/ole/comimpl.cpp
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@monolib_oleutils.o: $(srcdir)/src/msw/ole/oleutils.cpp $(MONOLIB_ODEP)
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(MONOLIB_CXXFLAGS) $(srcdir)/src/msw/ole/oleutils.cpp
@ -27378,6 +27410,15 @@ coredll_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(COREDLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@coredll_automtn.o: $(srcdir)/src/msw/ole/automtn.cpp $(COREDLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/ole/automtn.cpp
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@coredll_comimpl.o: $(srcdir)/src/msw/ole/comimpl.cpp $(COREDLL_ODEP)
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/ole/comimpl.cpp
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1@coredll_comimpl.o: $(srcdir)/src/msw/ole/comimpl.cpp $(COREDLL_ODEP)
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/ole/comimpl.cpp
@COND_TOOLKIT_MSW_USE_GUI_1@coredll_comimpl.o: $(srcdir)/src/msw/ole/comimpl.cpp $(COREDLL_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/ole/comimpl.cpp
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@coredll_oleutils.o: $(srcdir)/src/msw/ole/oleutils.cpp $(COREDLL_ODEP)
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(COREDLL_CXXFLAGS) $(srcdir)/src/msw/ole/oleutils.cpp
@ -30771,6 +30812,15 @@ corelib_win32.o: $(srcdir)/src/univ/themes/win32.cpp $(CORELIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@corelib_automtn.o: $(srcdir)/src/msw/ole/automtn.cpp $(CORELIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/ole/automtn.cpp
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@corelib_comimpl.o: $(srcdir)/src/msw/ole/comimpl.cpp $(CORELIB_ODEP)
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/ole/comimpl.cpp
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1@corelib_comimpl.o: $(srcdir)/src/msw/ole/comimpl.cpp $(CORELIB_ODEP)
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_3_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/ole/comimpl.cpp
@COND_TOOLKIT_MSW_USE_GUI_1@corelib_comimpl.o: $(srcdir)/src/msw/ole/comimpl.cpp $(CORELIB_ODEP)
@COND_TOOLKIT_MSW_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/ole/comimpl.cpp
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@corelib_oleutils.o: $(srcdir)/src/msw/ole/oleutils.cpp $(CORELIB_ODEP)
@COND_PLATFORM_WIN32_1_TOOLKIT_GTK_TOOLKIT_VERSION_2_USE_GUI_1@ $(CXXC) -c -o $@ $(CORELIB_CXXFLAGS) $(srcdir)/src/msw/ole/oleutils.cpp
@ -35259,7 +35309,6 @@ sound_sdl_sound_sdl.o: $(srcdir)/src/unix/sound_sdl.cpp
webkit2_ext_webview_webkit2_extension.o: $(srcdir)/src/gtk/webview_webkit2_extension.cpp
$(CXXC) -c -o $@ $(WEBKIT2_EXT_CXXFLAGS) $(srcdir)/src/gtk/webview_webkit2_extension.cpp
@COND_PYTHON@@COND_USE_STC_1@$(srcdir)/include/wx/stc/stc.h: \
@COND_PYTHON@@COND_USE_STC_1@$(srcdir)/src/stc/scintilla/include/Scintilla.iface \
@COND_PYTHON@@COND_USE_STC_1@$(srcdir)/src/stc/stc.cpp.in \

View File

@ -1228,6 +1228,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/generic/caret.cpp
src/generic/imaglist.cpp
src/msw/ole/automtn.cpp
src/msw/ole/comimpl.cpp
src/msw/ole/oleutils.cpp
src/msw/ole/safearray.cpp
src/msw/ole/uuid.cpp
@ -1242,6 +1243,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/generic/caret.h
wx/generic/imaglist.h
wx/msw/ole/automtn.h
wx/msw/ole/comimpl.h
wx/msw/ole/oleutils.h
wx/msw/ole/safearray.h
wx/msw/ole/uuid.h
@ -1885,6 +1887,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
src/msw/imaglist.cpp
src/msw/minifram.cpp
src/msw/nonownedwnd.cpp
src/msw/ole/comimpl.cpp
src/msw/ole/dataobj.cpp
src/msw/ole/dropsrc.cpp
src/msw/ole/droptgt.cpp
@ -2050,6 +2053,7 @@ IMPORTANT: please read docs/tech/tn0016.txt before modifying this file!
wx/msw/msvcrt.h
wx/msw/notebook.h
wx/msw/ole/access.h
wx/msw/ole/comimpl.h
wx/msw/ole/dataform.h
wx/msw/ole/dataobj.h
wx/msw/ole/dataobj2.h

View File

@ -1127,6 +1127,7 @@ GTK_WIN32_SRC =
src/generic/caret.cpp
src/generic/imaglist.cpp
src/msw/ole/automtn.cpp
src/msw/ole/comimpl.cpp
src/msw/ole/oleutils.cpp
src/msw/ole/safearray.cpp
src/msw/ole/uuid.cpp
@ -1140,6 +1141,7 @@ GTK_WIN32_HDR =
wx/generic/caret.h
wx/generic/imaglist.h
wx/msw/ole/automtn.h
wx/msw/ole/comimpl.h
wx/msw/ole/oleutils.h
wx/msw/ole/safearray.h
wx/msw/ole/uuid.h
@ -1747,6 +1749,7 @@ MSW_LOWLEVEL_SRC =
src/msw/imaglist.cpp
src/msw/minifram.cpp
src/msw/nonownedwnd.cpp
src/msw/ole/comimpl.cpp
src/msw/ole/dataobj.cpp
src/msw/ole/dropsrc.cpp
src/msw/ole/droptgt.cpp
@ -1906,6 +1909,7 @@ MSW_HDR =
wx/msw/msvcrt.h
wx/msw/notebook.h
wx/msw/ole/access.h
wx/msw/ole/comimpl.h
wx/msw/ole/dataform.h
wx/msw/ole/dataobj.h
wx/msw/ole/dataobj2.h

View File

@ -1822,6 +1822,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_imaglist.obj \
$(OBJS)\monodll_minifram.obj \
$(OBJS)\monodll_nonownedwnd.obj \
$(OBJS)\monodll_comimpl.obj \
$(OBJS)\monodll_dataobj.obj \
$(OBJS)\monodll_dropsrc.obj \
$(OBJS)\monodll_droptgt.obj \
@ -2109,6 +2110,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_imaglist.obj \
$(OBJS)\monodll_minifram.obj \
$(OBJS)\monodll_nonownedwnd.obj \
$(OBJS)\monodll_comimpl.obj \
$(OBJS)\monodll_dataobj.obj \
$(OBJS)\monodll_dropsrc.obj \
$(OBJS)\monodll_droptgt.obj \
@ -2653,6 +2655,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_imaglist.obj \
$(OBJS)\monolib_minifram.obj \
$(OBJS)\monolib_nonownedwnd.obj \
$(OBJS)\monolib_comimpl.obj \
$(OBJS)\monolib_dataobj.obj \
$(OBJS)\monolib_dropsrc.obj \
$(OBJS)\monolib_droptgt.obj \
@ -2940,6 +2943,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_imaglist.obj \
$(OBJS)\monolib_minifram.obj \
$(OBJS)\monolib_nonownedwnd.obj \
$(OBJS)\monolib_comimpl.obj \
$(OBJS)\monolib_dataobj.obj \
$(OBJS)\monolib_dropsrc.obj \
$(OBJS)\monolib_droptgt.obj \
@ -3356,6 +3360,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_imaglist.obj \
$(OBJS)\coredll_minifram.obj \
$(OBJS)\coredll_nonownedwnd.obj \
$(OBJS)\coredll_comimpl.obj \
$(OBJS)\coredll_dataobj.obj \
$(OBJS)\coredll_dropsrc.obj \
$(OBJS)\coredll_droptgt.obj \
@ -3643,6 +3648,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_imaglist.obj \
$(OBJS)\coredll_minifram.obj \
$(OBJS)\coredll_nonownedwnd.obj \
$(OBJS)\coredll_comimpl.obj \
$(OBJS)\coredll_dataobj.obj \
$(OBJS)\coredll_dropsrc.obj \
$(OBJS)\coredll_droptgt.obj \
@ -3927,6 +3933,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_imaglist.obj \
$(OBJS)\corelib_minifram.obj \
$(OBJS)\corelib_nonownedwnd.obj \
$(OBJS)\corelib_comimpl.obj \
$(OBJS)\corelib_dataobj.obj \
$(OBJS)\corelib_dropsrc.obj \
$(OBJS)\corelib_droptgt.obj \
@ -4214,6 +4221,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_imaglist.obj \
$(OBJS)\corelib_minifram.obj \
$(OBJS)\corelib_nonownedwnd.obj \
$(OBJS)\corelib_comimpl.obj \
$(OBJS)\corelib_dataobj.obj \
$(OBJS)\corelib_dropsrc.obj \
$(OBJS)\corelib_droptgt.obj \
@ -7726,6 +7734,11 @@ $(OBJS)\monodll_nonownedwnd.obj: ..\..\src\msw\nonownedwnd.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\nonownedwnd.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_comimpl.obj: ..\..\src\msw\ole\comimpl.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\ole\comimpl.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_dataobj.obj: ..\..\src\msw\ole\dataobj.cpp
$(CXX) -q -c -P -o$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\ole\dataobj.cpp
@ -10267,6 +10280,11 @@ $(OBJS)\monolib_nonownedwnd.obj: ..\..\src\msw\nonownedwnd.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\nonownedwnd.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_comimpl.obj: ..\..\src\msw\ole\comimpl.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\ole\comimpl.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_dataobj.obj: ..\..\src\msw\ole\dataobj.cpp
$(CXX) -q -c -P -o$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\ole\dataobj.cpp
@ -12751,6 +12769,11 @@ $(OBJS)\coredll_nonownedwnd.obj: ..\..\src\msw\nonownedwnd.cpp
$(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) ..\..\src\msw\nonownedwnd.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\coredll_comimpl.obj: ..\..\src\msw\ole\comimpl.cpp
$(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) ..\..\src\msw\ole\comimpl.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\coredll_dataobj.obj: ..\..\src\msw\ole\dataobj.cpp
$(CXX) -q -c -P -o$@ $(COREDLL_CXXFLAGS) ..\..\src\msw\ole\dataobj.cpp
@ -14228,6 +14251,11 @@ $(OBJS)\corelib_nonownedwnd.obj: ..\..\src\msw\nonownedwnd.cpp
$(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) ..\..\src\msw\nonownedwnd.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\corelib_comimpl.obj: ..\..\src\msw\ole\comimpl.cpp
$(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) ..\..\src\msw\ole\comimpl.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\corelib_dataobj.obj: ..\..\src\msw\ole\dataobj.cpp
$(CXX) -q -c -P -o$@ $(CORELIB_CXXFLAGS) ..\..\src\msw\ole\dataobj.cpp

View File

@ -1842,6 +1842,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_imaglist.o \
$(OBJS)\monodll_minifram.o \
$(OBJS)\monodll_nonownedwnd.o \
$(OBJS)\monodll_comimpl.o \
$(OBJS)\monodll_dataobj.o \
$(OBJS)\monodll_dropsrc.o \
$(OBJS)\monodll_droptgt.o \
@ -2131,6 +2132,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_imaglist.o \
$(OBJS)\monodll_minifram.o \
$(OBJS)\monodll_nonownedwnd.o \
$(OBJS)\monodll_comimpl.o \
$(OBJS)\monodll_dataobj.o \
$(OBJS)\monodll_dropsrc.o \
$(OBJS)\monodll_droptgt.o \
@ -2679,6 +2681,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_imaglist.o \
$(OBJS)\monolib_minifram.o \
$(OBJS)\monolib_nonownedwnd.o \
$(OBJS)\monolib_comimpl.o \
$(OBJS)\monolib_dataobj.o \
$(OBJS)\monolib_dropsrc.o \
$(OBJS)\monolib_droptgt.o \
@ -2968,6 +2971,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_imaglist.o \
$(OBJS)\monolib_minifram.o \
$(OBJS)\monolib_nonownedwnd.o \
$(OBJS)\monolib_comimpl.o \
$(OBJS)\monolib_dataobj.o \
$(OBJS)\monolib_dropsrc.o \
$(OBJS)\monolib_droptgt.o \
@ -3398,6 +3402,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_imaglist.o \
$(OBJS)\coredll_minifram.o \
$(OBJS)\coredll_nonownedwnd.o \
$(OBJS)\coredll_comimpl.o \
$(OBJS)\coredll_dataobj.o \
$(OBJS)\coredll_dropsrc.o \
$(OBJS)\coredll_droptgt.o \
@ -3687,6 +3692,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_imaglist.o \
$(OBJS)\coredll_minifram.o \
$(OBJS)\coredll_nonownedwnd.o \
$(OBJS)\coredll_comimpl.o \
$(OBJS)\coredll_dataobj.o \
$(OBJS)\coredll_dropsrc.o \
$(OBJS)\coredll_droptgt.o \
@ -3977,6 +3983,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_imaglist.o \
$(OBJS)\corelib_minifram.o \
$(OBJS)\corelib_nonownedwnd.o \
$(OBJS)\corelib_comimpl.o \
$(OBJS)\corelib_dataobj.o \
$(OBJS)\corelib_dropsrc.o \
$(OBJS)\corelib_droptgt.o \
@ -4266,6 +4273,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_imaglist.o \
$(OBJS)\corelib_minifram.o \
$(OBJS)\corelib_nonownedwnd.o \
$(OBJS)\corelib_comimpl.o \
$(OBJS)\corelib_dataobj.o \
$(OBJS)\corelib_dropsrc.o \
$(OBJS)\corelib_droptgt.o \
@ -7902,6 +7910,11 @@ $(OBJS)\monodll_nonownedwnd.o: ../../src/msw/nonownedwnd.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monodll_comimpl.o: ../../src/msw/ole/comimpl.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monodll_dataobj.o: ../../src/msw/ole/dataobj.cpp
$(CXX) -c -o $@ $(MONODLL_CXXFLAGS) $(CPPDEPS) $<
@ -10445,6 +10458,11 @@ $(OBJS)\monolib_nonownedwnd.o: ../../src/msw/nonownedwnd.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monolib_comimpl.o: ../../src/msw/ole/comimpl.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\monolib_dataobj.o: ../../src/msw/ole/dataobj.cpp
$(CXX) -c -o $@ $(MONOLIB_CXXFLAGS) $(CPPDEPS) $<
@ -12931,6 +12949,11 @@ $(OBJS)\coredll_nonownedwnd.o: ../../src/msw/nonownedwnd.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\coredll_comimpl.o: ../../src/msw/ole/comimpl.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\coredll_dataobj.o: ../../src/msw/ole/dataobj.cpp
$(CXX) -c -o $@ $(COREDLL_CXXFLAGS) $(CPPDEPS) $<
@ -14408,6 +14431,11 @@ $(OBJS)\corelib_nonownedwnd.o: ../../src/msw/nonownedwnd.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\corelib_comimpl.o: ../../src/msw/ole/comimpl.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<
endif
ifeq ($(USE_GUI),1)
$(OBJS)\corelib_dataobj.o: ../../src/msw/ole/dataobj.cpp
$(CXX) -c -o $@ $(CORELIB_CXXFLAGS) $(CPPDEPS) $<

View File

@ -2123,6 +2123,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_imaglist.obj \
$(OBJS)\monodll_minifram.obj \
$(OBJS)\monodll_nonownedwnd.obj \
$(OBJS)\monodll_comimpl.obj \
$(OBJS)\monodll_dataobj.obj \
$(OBJS)\monodll_dropsrc.obj \
$(OBJS)\monodll_droptgt.obj \
@ -2410,6 +2411,7 @@ ____CORE_SRC_FILENAMES_OBJECTS = \
$(OBJS)\monodll_imaglist.obj \
$(OBJS)\monodll_minifram.obj \
$(OBJS)\monodll_nonownedwnd.obj \
$(OBJS)\monodll_comimpl.obj \
$(OBJS)\monodll_dataobj.obj \
$(OBJS)\monodll_dropsrc.obj \
$(OBJS)\monodll_droptgt.obj \
@ -2960,6 +2962,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_imaglist.obj \
$(OBJS)\monolib_minifram.obj \
$(OBJS)\monolib_nonownedwnd.obj \
$(OBJS)\monolib_comimpl.obj \
$(OBJS)\monolib_dataobj.obj \
$(OBJS)\monolib_dropsrc.obj \
$(OBJS)\monolib_droptgt.obj \
@ -3247,6 +3250,7 @@ ____CORE_SRC_FILENAMES_1_OBJECTS = \
$(OBJS)\monolib_imaglist.obj \
$(OBJS)\monolib_minifram.obj \
$(OBJS)\monolib_nonownedwnd.obj \
$(OBJS)\monolib_comimpl.obj \
$(OBJS)\monolib_dataobj.obj \
$(OBJS)\monolib_dropsrc.obj \
$(OBJS)\monolib_droptgt.obj \
@ -3729,6 +3733,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_imaglist.obj \
$(OBJS)\coredll_minifram.obj \
$(OBJS)\coredll_nonownedwnd.obj \
$(OBJS)\coredll_comimpl.obj \
$(OBJS)\coredll_dataobj.obj \
$(OBJS)\coredll_dropsrc.obj \
$(OBJS)\coredll_droptgt.obj \
@ -4016,6 +4021,7 @@ ____CORE_SRC_FILENAMES_2_OBJECTS = \
$(OBJS)\coredll_imaglist.obj \
$(OBJS)\coredll_minifram.obj \
$(OBJS)\coredll_nonownedwnd.obj \
$(OBJS)\coredll_comimpl.obj \
$(OBJS)\coredll_dataobj.obj \
$(OBJS)\coredll_dropsrc.obj \
$(OBJS)\coredll_droptgt.obj \
@ -4306,6 +4312,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_imaglist.obj \
$(OBJS)\corelib_minifram.obj \
$(OBJS)\corelib_nonownedwnd.obj \
$(OBJS)\corelib_comimpl.obj \
$(OBJS)\corelib_dataobj.obj \
$(OBJS)\corelib_dropsrc.obj \
$(OBJS)\corelib_droptgt.obj \
@ -4593,6 +4600,7 @@ ____CORE_SRC_FILENAMES_3_OBJECTS = \
$(OBJS)\corelib_imaglist.obj \
$(OBJS)\corelib_minifram.obj \
$(OBJS)\corelib_nonownedwnd.obj \
$(OBJS)\corelib_comimpl.obj \
$(OBJS)\corelib_dataobj.obj \
$(OBJS)\corelib_dropsrc.obj \
$(OBJS)\corelib_droptgt.obj \
@ -8419,6 +8427,11 @@ $(OBJS)\monodll_nonownedwnd.obj: ..\..\src\msw\nonownedwnd.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\nonownedwnd.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_comimpl.obj: ..\..\src\msw\ole\comimpl.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\ole\comimpl.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monodll_dataobj.obj: ..\..\src\msw\ole\dataobj.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONODLL_CXXFLAGS) ..\..\src\msw\ole\dataobj.cpp
@ -10960,6 +10973,11 @@ $(OBJS)\monolib_nonownedwnd.obj: ..\..\src\msw\nonownedwnd.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\nonownedwnd.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_comimpl.obj: ..\..\src\msw\ole\comimpl.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\ole\comimpl.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\monolib_dataobj.obj: ..\..\src\msw\ole\dataobj.cpp
$(CXX) /c /nologo /TP /Fo$@ $(MONOLIB_CXXFLAGS) ..\..\src\msw\ole\dataobj.cpp
@ -13444,6 +13462,11 @@ $(OBJS)\coredll_nonownedwnd.obj: ..\..\src\msw\nonownedwnd.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\msw\nonownedwnd.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\coredll_comimpl.obj: ..\..\src\msw\ole\comimpl.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\msw\ole\comimpl.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\coredll_dataobj.obj: ..\..\src\msw\ole\dataobj.cpp
$(CXX) /c /nologo /TP /Fo$@ $(COREDLL_CXXFLAGS) ..\..\src\msw\ole\dataobj.cpp
@ -14921,6 +14944,11 @@ $(OBJS)\corelib_nonownedwnd.obj: ..\..\src\msw\nonownedwnd.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\msw\nonownedwnd.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\corelib_comimpl.obj: ..\..\src\msw\ole\comimpl.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\msw\ole\comimpl.cpp
!endif
!if "$(USE_GUI)" == "1"
$(OBJS)\corelib_dataobj.obj: ..\..\src\msw\ole\dataobj.cpp
$(CXX) /c /nologo /TP /Fo$@ $(CORELIB_CXXFLAGS) ..\..\src\msw\ole\dataobj.cpp

View File

@ -685,6 +685,7 @@
</ClCompile>
<ClCompile Include="..\..\src\msw\cursor.cpp" />
<ClCompile Include="..\..\src\msw\data.cpp" />
<ClCompile Include="..\..\src\msw\ole\comimpl.cpp" />
<ClCompile Include="..\..\src\msw\ole\dataobj.cpp" />
<ClCompile Include="..\..\src\msw\dc.cpp" />
<ClCompile Include="..\..\src\msw\dcclient.cpp" />
@ -1051,6 +1052,7 @@
<ClInclude Include="..\..\include\wx\msw\ctrlsub.h" />
<ClInclude Include="..\..\include\wx\msw\cursor.h" />
<ClInclude Include="..\..\include\wx\msw\custombgwin.h" />
<ClInclude Include="..\..\include\wx\msw\ole\comimpl.h" />
<ClInclude Include="..\..\include\wx\msw\ole\dataform.h" />
<ClInclude Include="..\..\include\wx\msw\ole\dataobj.h" />
<ClInclude Include="..\..\include\wx\msw\ole\dataobj2.h" />

View File

@ -762,6 +762,9 @@
<ClCompile Include="..\..\src\msw\ole\automtn.cpp">
<Filter>MSW Sources</Filter>
</ClCompile>
<ClCompile Include="..\..\src\msw\ole\comimpl.cpp">
<Filter>MSW Sources</Filter>
</ClCompile>
<ClCompile Include="..\..\src\msw\ole\dataobj.cpp">
<Filter>MSW Sources</Filter>
</ClCompile>
@ -1549,6 +1552,9 @@
<ClInclude Include="..\..\include\wx\msw\ole\automtn.h">
<Filter>MSW Headers</Filter>
</ClInclude>
<ClInclude Include="..\..\include\wx\msw\ole\comimpl.h">
<Filter>MSW Headers</Filter>
</ClInclude>
<ClInclude Include="..\..\include\wx\msw\ole\dataform.h">
<Filter>MSW Headers</Filter>
</ClInclude>

View File

@ -763,6 +763,9 @@
<File
RelativePath="..\..\src\msw\combobox.cpp">
</File>
<File
RelativePath="..\..\src\msw\ole\comimpl.cpp">
</File>
<File
RelativePath="..\..\src\msw\control.cpp">
</File>
@ -1307,6 +1310,9 @@
<File
RelativePath="..\..\include\wx\msw\combobox.h">
</File>
<File
RelativePath="..\..\include\wx\msw\ole\comimpl.h">
</File>
<File
RelativePath="..\..\include\wx\msw\commandlinkbutton.h">
</File>

View File

@ -1422,6 +1422,10 @@
RelativePath="..\..\src\msw\combobox.cpp"
>
</File>
<File
RelativePath="..\..\src\msw\ole\comimpl.cpp"
>
</File>
<File
RelativePath="..\..\src\msw\control.cpp"
>
@ -2205,6 +2209,10 @@
RelativePath="..\..\include\wx\msw\combobox.h"
>
</File>
<File
RelativePath="..\..\include\wx\msw\ole\comimpl.h"
>
</File>
<File
RelativePath="..\..\include\wx\msw\commandlinkbutton.h"
>

View File

@ -1418,6 +1418,10 @@
RelativePath="..\..\src\msw\combobox.cpp"
>
</File>
<File
RelativePath="..\..\src\msw\ole\comimpl.cpp"
>
</File>
<File
RelativePath="..\..\src\msw\control.cpp"
>
@ -2201,6 +2205,10 @@
RelativePath="..\..\include\wx\msw\combobox.h"
>
</File>
<File
RelativePath="..\..\include\wx\msw\ole\comimpl.h"
>
</File>
<File
RelativePath="..\..\include\wx\msw\commandlinkbutton.h"
>

View File

@ -0,0 +1,163 @@
///////////////////////////////////////////////////////////////////////////////
// Name: wx/msw/ole/comimpl.h
// Purpose: COM helper routines, COM debugging support &c
// Author: Vadim Zeitlin
// Modified by:
// Created: 19.02.1998
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#ifndef WX_COMIMPL_H
#define WX_COMIMPL_H
#include "wx/defs.h"
#include "wx/msw/wrapwin.h"
// get IUnknown, REFIID &c
#include <combaseapi.h>
// ============================================================================
// General purpose functions and macros
// ============================================================================
// release the interface pointer (if !NULL)
inline void ReleaseInterface(IUnknown *pIUnk)
{
if ( pIUnk != NULL )
pIUnk->Release();
}
// release the interface pointer (if !NULL) and make it NULL
#define RELEASE_AND_NULL(p) if ( (p) != NULL ) { p->Release(); p = NULL; };
// return true if the iid is in the array
extern WXDLLIMPEXP_CORE bool IsIidFromList(REFIID riid, const IID *aIids[], size_t nCount);
// ============================================================================
// IUnknown implementation helpers
// ============================================================================
/*
The most dumb implementation of IUnknown methods. We don't support
aggregation nor containment, but for 99% of cases this simple
implementation is quite enough.
Usage is trivial: here is all you should have
1) DECLARE_IUNKNOWN_METHODS in your (IUnknown derived!) class declaration
2) BEGIN/END_IID_TABLE with ADD_IID in between for all interfaces you
support (at least all for which you intent to return 'this' from QI,
i.e. you should derive from IFoo if you have ADD_IID(Foo)) somewhere else
3) IMPLEMENT_IUNKNOWN_METHODS somewhere also
These macros are quite simple: AddRef and Release are trivial and QI does
lookup in a static member array of IIDs and returns 'this' if it founds
the requested interface in it or E_NOINTERFACE if not.
*/
/*
wxAutoULong: this class is used for automatically initalising m_cRef to 0
*/
class wxAutoULong
{
public:
wxAutoULong(ULONG value = 0) : m_Value(value) { }
operator ULONG&() { return m_Value; }
ULONG& operator=(ULONG value) { m_Value = value; return m_Value; }
wxAutoULong& operator++() { ++m_Value; return *this; }
const wxAutoULong operator++( int ) { wxAutoULong temp = *this; ++m_Value; return temp; }
wxAutoULong& operator--() { --m_Value; return *this; }
const wxAutoULong operator--( int ) { wxAutoULong temp = *this; --m_Value; return temp; }
private:
ULONG m_Value;
};
// declare the methods and the member variable containing reference count
// you must also define the ms_aIids array somewhere with BEGIN_IID_TABLE
// and friends (see below)
#define DECLARE_IUNKNOWN_METHODS \
public: \
STDMETHODIMP QueryInterface(REFIID, void **) wxOVERRIDE; \
STDMETHODIMP_(ULONG) AddRef() wxOVERRIDE; \
STDMETHODIMP_(ULONG) Release() wxOVERRIDE; \
private: \
static const IID *ms_aIids[]; \
wxAutoULong m_cRef
// macros for declaring supported interfaces
// NB: ADD_IID prepends IID_I whereas ADD_RAW_IID does not
#define BEGIN_IID_TABLE(cname) const IID *cname::ms_aIids[] = {
#define ADD_IID(iid) &IID_I##iid,
#define ADD_RAW_IID(iid) &iid,
#define END_IID_TABLE }
// implementation is as straightforward as possible
// Parameter: classname - the name of the class
#define IMPLEMENT_IUNKNOWN_METHODS(classname) \
STDMETHODIMP classname::QueryInterface(REFIID riid, void **ppv) \
{ \
wxLogQueryInterface(wxT(#classname), riid); \
\
if ( IsIidFromList(riid, ms_aIids, WXSIZEOF(ms_aIids)) ) { \
*ppv = this; \
AddRef(); \
\
return S_OK; \
} \
else { \
*ppv = NULL; \
\
return (HRESULT) E_NOINTERFACE; \
} \
} \
\
STDMETHODIMP_(ULONG) classname::AddRef() \
{ \
wxLogAddRef(wxT(#classname), m_cRef); \
\
return ++m_cRef; \
} \
\
STDMETHODIMP_(ULONG) classname::Release() \
{ \
wxLogRelease(wxT(#classname), m_cRef); \
\
if ( --m_cRef == wxAutoULong(0) ) { \
delete this; \
return 0; \
} \
else \
return m_cRef; \
}
// ============================================================================
// Debugging support
// ============================================================================
// VZ: I don't know it's not done for compilers other than VC++ but I leave it
// as is. Please note, though, that tracing COM interface calls may be
// incredibly useful when debugging COM programs.
#if defined(__WXDEBUG__) && defined(__VISUALC__)
// ----------------------------------------------------------------------------
// All COM specific log functions have DebugTrace level (as LogTrace)
// ----------------------------------------------------------------------------
// tries to translate riid into a symbolic name, if possible
WXDLLIMPEXP_CORE void wxLogQueryInterface(const wxChar *szInterface, REFIID riid);
// these functions print out the new value of reference counter
WXDLLIMPEXP_CORE void wxLogAddRef (const wxChar *szInterface, ULONG cRef);
WXDLLIMPEXP_CORE void wxLogRelease(const wxChar *szInterface, ULONG cRef);
#else //!__WXDEBUG__
#define wxLogQueryInterface(szInterface, riid)
#define wxLogAddRef(szInterface, cRef)
#define wxLogRelease(szInterface, cRef)
#endif //__WXDEBUG__
#endif // WX_COMIMPL_H

View File

@ -23,6 +23,8 @@
#include "wx/log.h"
#include "wx/variant.h"
#include "wx/msw/ole/comimpl.h"
// ============================================================================
// General purpose functions and macros
// ============================================================================
@ -59,149 +61,6 @@ inline void wxOleUninitialize()
::OleUninitialize();
}
// ----------------------------------------------------------------------------
// misc helper functions/macros
// ----------------------------------------------------------------------------
// release the interface pointer (if !NULL)
inline void ReleaseInterface(IUnknown *pIUnk)
{
if ( pIUnk != NULL )
pIUnk->Release();
}
// release the interface pointer (if !NULL) and make it NULL
#define RELEASE_AND_NULL(p) if ( (p) != NULL ) { p->Release(); p = NULL; };
// return true if the iid is in the array
extern WXDLLIMPEXP_CORE bool IsIidFromList(REFIID riid, const IID *aIids[], size_t nCount);
// ============================================================================
// IUnknown implementation helpers
// ============================================================================
/*
The most dumb implementation of IUnknown methods. We don't support
aggregation nor containment, but for 99% of cases this simple
implementation is quite enough.
Usage is trivial: here is all you should have
1) DECLARE_IUNKNOWN_METHODS in your (IUnknown derived!) class declaration
2) BEGIN/END_IID_TABLE with ADD_IID in between for all interfaces you
support (at least all for which you intent to return 'this' from QI,
i.e. you should derive from IFoo if you have ADD_IID(Foo)) somewhere else
3) IMPLEMENT_IUNKNOWN_METHODS somewhere also
These macros are quite simple: AddRef and Release are trivial and QI does
lookup in a static member array of IIDs and returns 'this' if it founds
the requested interface in it or E_NOINTERFACE if not.
*/
/*
wxAutoULong: this class is used for automatically initalising m_cRef to 0
*/
class wxAutoULong
{
public:
wxAutoULong(ULONG value = 0) : m_Value(value) { }
operator ULONG&() { return m_Value; }
ULONG& operator=(ULONG value) { m_Value = value; return m_Value; }
wxAutoULong& operator++() { ++m_Value; return *this; }
const wxAutoULong operator++( int ) { wxAutoULong temp = *this; ++m_Value; return temp; }
wxAutoULong& operator--() { --m_Value; return *this; }
const wxAutoULong operator--( int ) { wxAutoULong temp = *this; --m_Value; return temp; }
private:
ULONG m_Value;
};
// declare the methods and the member variable containing reference count
// you must also define the ms_aIids array somewhere with BEGIN_IID_TABLE
// and friends (see below)
#define DECLARE_IUNKNOWN_METHODS \
public: \
STDMETHODIMP QueryInterface(REFIID, void **) wxOVERRIDE; \
STDMETHODIMP_(ULONG) AddRef() wxOVERRIDE; \
STDMETHODIMP_(ULONG) Release() wxOVERRIDE; \
private: \
static const IID *ms_aIids[]; \
wxAutoULong m_cRef
// macros for declaring supported interfaces
// NB: ADD_IID prepends IID_I whereas ADD_RAW_IID does not
#define BEGIN_IID_TABLE(cname) const IID *cname::ms_aIids[] = {
#define ADD_IID(iid) &IID_I##iid,
#define ADD_RAW_IID(iid) &iid,
#define END_IID_TABLE }
// implementation is as straightforward as possible
// Parameter: classname - the name of the class
#define IMPLEMENT_IUNKNOWN_METHODS(classname) \
STDMETHODIMP classname::QueryInterface(REFIID riid, void **ppv) \
{ \
wxLogQueryInterface(wxT(#classname), riid); \
\
if ( IsIidFromList(riid, ms_aIids, WXSIZEOF(ms_aIids)) ) { \
*ppv = this; \
AddRef(); \
\
return S_OK; \
} \
else { \
*ppv = NULL; \
\
return (HRESULT) E_NOINTERFACE; \
} \
} \
\
STDMETHODIMP_(ULONG) classname::AddRef() \
{ \
wxLogAddRef(wxT(#classname), m_cRef); \
\
return ++m_cRef; \
} \
\
STDMETHODIMP_(ULONG) classname::Release() \
{ \
wxLogRelease(wxT(#classname), m_cRef); \
\
if ( --m_cRef == wxAutoULong(0) ) { \
delete this; \
return 0; \
} \
else \
return m_cRef; \
}
// ============================================================================
// Debugging support
// ============================================================================
// VZ: I don't know it's not done for compilers other than VC++ but I leave it
// as is. Please note, though, that tracing OLE interface calls may be
// incredibly useful when debugging OLE programs.
#if defined(__WXDEBUG__) && defined(__VISUALC__)
// ----------------------------------------------------------------------------
// All OLE specific log functions have DebugTrace level (as LogTrace)
// ----------------------------------------------------------------------------
// tries to translate riid into a symbolic name, if possible
WXDLLIMPEXP_CORE void wxLogQueryInterface(const wxChar *szInterface, REFIID riid);
// these functions print out the new value of reference counter
WXDLLIMPEXP_CORE void wxLogAddRef (const wxChar *szInterface, ULONG cRef);
WXDLLIMPEXP_CORE void wxLogRelease(const wxChar *szInterface, ULONG cRef);
#else //!__WXDEBUG__
#define wxLogQueryInterface(szInterface, riid)
#define wxLogAddRef(szInterface, cRef)
#define wxLogRelease(szInterface, cRef)
#endif //__WXDEBUG__
// wrapper around BSTR type (by Vadim Zeitlin)
class WXDLLIMPEXP_CORE wxBasicString

178
src/msw/ole/comimpl.cpp Normal file
View File

@ -0,0 +1,178 @@
///////////////////////////////////////////////////////////////////////////////
// Name: src/msw/ole/oleutils.cpp
// Purpose: implementation of OLE helper functions
// Author: Vadim Zeitlin
// Modified by:
// Created: 19.02.98
// Copyright: (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr>
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
// Declarations
// ============================================================================
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
#if defined(__BORLANDC__)
#pragma hdrstop
#endif
#ifndef __CYGWIN10__
#include "wx/msw/ole/comimpl.h"
// ============================================================================
// Implementation
// ============================================================================
// return true if the iid is in the array
WXDLLEXPORT bool IsIidFromList(REFIID riid, const IID *aIids[], size_t nCount)
{
for ( size_t i = 0; i < nCount; i++ ) {
if ( riid == *aIids[i] )
return true;
}
return false;
}
// ----------------------------------------------------------------------------
// Debug support
// ----------------------------------------------------------------------------
#if defined(__WXDEBUG__) && defined(__VISUALC__)
#include "wx/log.h"
#include "wx/msw/ole/uuid.h"
#include <docobj.h>
static wxString GetIidName(REFIID riid)
{
// an association between symbolic name and numeric value of an IID
struct KNOWN_IID {
const IID *pIid;
const wxChar *szName;
};
// construct the table containing all known interfaces
#define ADD_KNOWN_IID(name) { &IID_I##name, wxT(#name) }
static const KNOWN_IID aKnownIids[] = {
ADD_KNOWN_IID(AdviseSink),
ADD_KNOWN_IID(AdviseSink2),
ADD_KNOWN_IID(BindCtx),
ADD_KNOWN_IID(ClassFactory),
ADD_KNOWN_IID(ContinueCallback),
ADD_KNOWN_IID(EnumOleDocumentViews),
ADD_KNOWN_IID(OleCommandTarget),
ADD_KNOWN_IID(OleDocument),
ADD_KNOWN_IID(OleDocumentSite),
ADD_KNOWN_IID(OleDocumentView),
ADD_KNOWN_IID(Print),
ADD_KNOWN_IID(DataAdviseHolder),
ADD_KNOWN_IID(DataObject),
ADD_KNOWN_IID(Debug),
ADD_KNOWN_IID(DebugStream),
ADD_KNOWN_IID(DfReserved1),
ADD_KNOWN_IID(DfReserved2),
ADD_KNOWN_IID(DfReserved3),
ADD_KNOWN_IID(Dispatch),
ADD_KNOWN_IID(DropSource),
ADD_KNOWN_IID(DropTarget),
ADD_KNOWN_IID(EnumCallback),
ADD_KNOWN_IID(EnumFORMATETC),
ADD_KNOWN_IID(EnumGeneric),
ADD_KNOWN_IID(EnumHolder),
ADD_KNOWN_IID(EnumMoniker),
ADD_KNOWN_IID(EnumOLEVERB),
ADD_KNOWN_IID(EnumSTATDATA),
ADD_KNOWN_IID(EnumSTATSTG),
ADD_KNOWN_IID(EnumString),
ADD_KNOWN_IID(EnumUnknown),
ADD_KNOWN_IID(EnumVARIANT),
ADD_KNOWN_IID(ExternalConnection),
ADD_KNOWN_IID(InternalMoniker),
ADD_KNOWN_IID(LockBytes),
ADD_KNOWN_IID(Malloc),
ADD_KNOWN_IID(Marshal),
ADD_KNOWN_IID(MessageFilter),
ADD_KNOWN_IID(Moniker),
ADD_KNOWN_IID(OleAdviseHolder),
ADD_KNOWN_IID(OleCache),
ADD_KNOWN_IID(OleCache2),
ADD_KNOWN_IID(OleCacheControl),
ADD_KNOWN_IID(OleClientSite),
ADD_KNOWN_IID(OleContainer),
ADD_KNOWN_IID(OleInPlaceActiveObject),
ADD_KNOWN_IID(OleInPlaceFrame),
ADD_KNOWN_IID(OleInPlaceObject),
ADD_KNOWN_IID(OleInPlaceSite),
ADD_KNOWN_IID(OleInPlaceUIWindow),
ADD_KNOWN_IID(OleItemContainer),
ADD_KNOWN_IID(OleLink),
ADD_KNOWN_IID(OleManager),
ADD_KNOWN_IID(OleObject),
ADD_KNOWN_IID(OlePresObj),
ADD_KNOWN_IID(OleWindow),
ADD_KNOWN_IID(PSFactory),
ADD_KNOWN_IID(ParseDisplayName),
ADD_KNOWN_IID(Persist),
ADD_KNOWN_IID(PersistFile),
ADD_KNOWN_IID(PersistStorage),
ADD_KNOWN_IID(PersistStream),
ADD_KNOWN_IID(ProxyManager),
ADD_KNOWN_IID(RootStorage),
ADD_KNOWN_IID(RpcChannel),
ADD_KNOWN_IID(RpcProxy),
ADD_KNOWN_IID(RpcStub),
ADD_KNOWN_IID(RunnableObject),
ADD_KNOWN_IID(RunningObjectTable),
ADD_KNOWN_IID(StdMarshalInfo),
ADD_KNOWN_IID(Storage),
ADD_KNOWN_IID(Stream),
ADD_KNOWN_IID(StubManager),
ADD_KNOWN_IID(Unknown),
ADD_KNOWN_IID(ViewObject),
ADD_KNOWN_IID(ViewObject2),
};
// don't clobber preprocessor name space
#undef ADD_KNOWN_IID
// try to find the interface in the table
for ( size_t ui = 0; ui < WXSIZEOF(aKnownIids); ui++ ) {
if ( riid == *aKnownIids[ui].pIid ) {
return aKnownIids[ui].szName;
}
}
// unknown IID, just transform to string
Uuid uuid(riid);
return wxString((const wxChar *)uuid);
}
WXDLLEXPORT void wxLogQueryInterface(const wxChar *szInterface, REFIID riid)
{
wxLogTrace(wxTRACE_OleCalls, wxT("%s::QueryInterface (iid = %s)"),
szInterface, GetIidName(riid).c_str());
}
WXDLLEXPORT void wxLogAddRef(const wxChar *szInterface, ULONG cRef)
{
wxLogTrace(wxTRACE_OleCalls, wxT("After %s::AddRef: m_cRef = %d"), szInterface, cRef + 1);
}
WXDLLEXPORT void wxLogRelease(const wxChar *szInterface, ULONG cRef)
{
wxLogTrace(wxTRACE_OleCalls, wxT("After %s::Release: m_cRef = %d"), szInterface, cRef - 1);
}
#endif // __WXDEBUG__ && __VISUALC__
#endif // __CYGWIN10__

View File

@ -25,39 +25,17 @@
#if wxUSE_OLE
#ifndef WX_PRECOMP
#include "wx/log.h"
#endif
#ifndef __CYGWIN10__
#include "wx/msw/private.h"
// OLE
#include "wx/msw/ole/uuid.h"
#include "wx/msw/ole/oleutils.h"
#include "wx/msw/ole/safearray.h"
#if defined(__VISUALC__)
#include <docobj.h>
#endif
// ============================================================================
// Implementation
// ============================================================================
// return true if the iid is in the array
WXDLLEXPORT bool IsIidFromList(REFIID riid, const IID *aIids[], size_t nCount)
{
for ( size_t i = 0; i < nCount; i++ ) {
if ( riid == *aIids[i] )
return true;
}
return false;
}
WXDLLEXPORT BSTR wxConvertStringToOle(const wxString& str)
{
return wxBasicString(str).Get();
@ -540,141 +518,6 @@ wxConvertOleToVariant(const VARIANTARG& oleVariant, wxVariant& variant, long fla
#endif // wxUSE_VARIANT
// ----------------------------------------------------------------------------
// Debug support
// ----------------------------------------------------------------------------
#if wxUSE_DATAOBJ
#if wxDEBUG_LEVEL && defined(__VISUALC__)
static wxString GetIidName(REFIID riid)
{
// an association between symbolic name and numeric value of an IID
struct KNOWN_IID {
const IID *pIid;
const wxChar *szName;
};
// construct the table containing all known interfaces
#define ADD_KNOWN_IID(name) { &IID_I##name, wxT(#name) }
static const KNOWN_IID aKnownIids[] = {
ADD_KNOWN_IID(AdviseSink),
ADD_KNOWN_IID(AdviseSink2),
ADD_KNOWN_IID(BindCtx),
ADD_KNOWN_IID(ClassFactory),
#if ( !defined( __VISUALC__) || (__VISUALC__!=1010) )
ADD_KNOWN_IID(ContinueCallback),
ADD_KNOWN_IID(EnumOleDocumentViews),
ADD_KNOWN_IID(OleCommandTarget),
ADD_KNOWN_IID(OleDocument),
ADD_KNOWN_IID(OleDocumentSite),
ADD_KNOWN_IID(OleDocumentView),
ADD_KNOWN_IID(Print),
#endif
ADD_KNOWN_IID(DataAdviseHolder),
ADD_KNOWN_IID(DataObject),
ADD_KNOWN_IID(Debug),
ADD_KNOWN_IID(DebugStream),
ADD_KNOWN_IID(DfReserved1),
ADD_KNOWN_IID(DfReserved2),
ADD_KNOWN_IID(DfReserved3),
ADD_KNOWN_IID(Dispatch),
ADD_KNOWN_IID(DropSource),
ADD_KNOWN_IID(DropTarget),
ADD_KNOWN_IID(EnumCallback),
ADD_KNOWN_IID(EnumFORMATETC),
ADD_KNOWN_IID(EnumGeneric),
ADD_KNOWN_IID(EnumHolder),
ADD_KNOWN_IID(EnumMoniker),
ADD_KNOWN_IID(EnumOLEVERB),
ADD_KNOWN_IID(EnumSTATDATA),
ADD_KNOWN_IID(EnumSTATSTG),
ADD_KNOWN_IID(EnumString),
ADD_KNOWN_IID(EnumUnknown),
ADD_KNOWN_IID(EnumVARIANT),
ADD_KNOWN_IID(ExternalConnection),
ADD_KNOWN_IID(InternalMoniker),
ADD_KNOWN_IID(LockBytes),
ADD_KNOWN_IID(Malloc),
ADD_KNOWN_IID(Marshal),
ADD_KNOWN_IID(MessageFilter),
ADD_KNOWN_IID(Moniker),
ADD_KNOWN_IID(OleAdviseHolder),
ADD_KNOWN_IID(OleCache),
ADD_KNOWN_IID(OleCache2),
ADD_KNOWN_IID(OleCacheControl),
ADD_KNOWN_IID(OleClientSite),
ADD_KNOWN_IID(OleContainer),
ADD_KNOWN_IID(OleInPlaceActiveObject),
ADD_KNOWN_IID(OleInPlaceFrame),
ADD_KNOWN_IID(OleInPlaceObject),
ADD_KNOWN_IID(OleInPlaceSite),
ADD_KNOWN_IID(OleInPlaceUIWindow),
ADD_KNOWN_IID(OleItemContainer),
ADD_KNOWN_IID(OleLink),
ADD_KNOWN_IID(OleManager),
ADD_KNOWN_IID(OleObject),
ADD_KNOWN_IID(OlePresObj),
ADD_KNOWN_IID(OleWindow),
ADD_KNOWN_IID(PSFactory),
ADD_KNOWN_IID(ParseDisplayName),
ADD_KNOWN_IID(Persist),
ADD_KNOWN_IID(PersistFile),
ADD_KNOWN_IID(PersistStorage),
ADD_KNOWN_IID(PersistStream),
ADD_KNOWN_IID(ProxyManager),
ADD_KNOWN_IID(RootStorage),
ADD_KNOWN_IID(RpcChannel),
ADD_KNOWN_IID(RpcProxy),
ADD_KNOWN_IID(RpcStub),
ADD_KNOWN_IID(RunnableObject),
ADD_KNOWN_IID(RunningObjectTable),
ADD_KNOWN_IID(StdMarshalInfo),
ADD_KNOWN_IID(Storage),
ADD_KNOWN_IID(Stream),
ADD_KNOWN_IID(StubManager),
ADD_KNOWN_IID(Unknown),
ADD_KNOWN_IID(ViewObject),
ADD_KNOWN_IID(ViewObject2),
};
// don't clobber preprocessor name space
#undef ADD_KNOWN_IID
// try to find the interface in the table
for ( size_t ui = 0; ui < WXSIZEOF(aKnownIids); ui++ ) {
if ( riid == *aKnownIids[ui].pIid ) {
return aKnownIids[ui].szName;
}
}
// unknown IID, just transform to string
Uuid uuid(riid);
return wxString((const wxChar *)uuid);
}
WXDLLEXPORT void wxLogQueryInterface(const wxChar *szInterface, REFIID riid)
{
wxLogTrace(wxTRACE_OleCalls, wxT("%s::QueryInterface (iid = %s)"),
szInterface, GetIidName(riid).c_str());
}
WXDLLEXPORT void wxLogAddRef(const wxChar *szInterface, ULONG cRef)
{
wxLogTrace(wxTRACE_OleCalls, wxT("After %s::AddRef: m_cRef = %d"), szInterface, cRef + 1);
}
WXDLLEXPORT void wxLogRelease(const wxChar *szInterface, ULONG cRef)
{
wxLogTrace(wxTRACE_OleCalls, wxT("After %s::Release: m_cRef = %d"), szInterface, cRef - 1);
}
#endif // wxDEBUG_LEVEL
#endif // wxUSE_DATAOBJ
#endif // __CYGWIN10__
#endif // wxUSE_OLE