The First RigmarOLE

A PEEK INTO OLE AND DOCOBJECTS
NOTE:THIS DOCUMENT IS AN EARLY RELEASE OF THE FINAL SPECIFICATION. IT IS MEANT TO SPECIFY AND ACCOMPANY THE TUTORIAL THAT IS STILL IN DEVELOPMENT.SOME OF THE INFORMATION IN THE TUTORIAL MAY BE IMPRECISE OR MAY NOT BE AN ACCURATE REPRESENTATION OF THE FUNCTIONALITY OF THE FINAL DOCUMENT OR TUTORIAL.

WE ASSUME NO RESPONSIBILITY WHATSOEVER FOR ANY DAMAGES THAT MIGHT OCCUR EITHER DIRECTLY OR INDIRECTLY FROM THESE INACCURACIES. ALL THE FAMILY TROUBLES ACCRUING AS A RESULT OF EXCESSIVE PERUSAL OF THIS TUTORIAL AND LESS OF TIME BEING SPENT IN THE HOUSE THEREOF; OR BY WAY OF SCUFFLES RELATING TO TIME-SLOTS ON THE COMPUTER; OR ANY OTHER FORM OF LEGAL/ILLEGAL HASSLES ARISING AS A DIRECT OR INDIRECT CONSEQUENCE OF THE SUBJECT MATTER OF THESE FILES, INCLUDING INTELLECTUAL DEBATES, BUT EXCLUDING PHILOSOPHICAL TYPOS; OR THE DILAPIDATION OF THE COMPUTER WHILE EXECUTING ANY OF THE CODE BUNDLED HEREWITH; OR ANY UPSURGE IN THE REGISTRATIONS AT THE LOCAL ASYLUM OR MONASTERY ACCOUNTABLE TO NAUSEATING PROGRAMS ETC. -- SHALL NOT BE THE LIABILITY OF THE AUTHORS.


A-LINE-AT-A-TIME APPROACH

A 15-year tryst with the teaching profession can teach you one thing -- it is indeed a cinch to upset people. The way we are going to explain OLE might make many people make faces, but there plainly is no other way if you want to do great things with such a brain-wrenching technology.

We will give you one simple program. We will expect you to try it out. Then we will add a line at a time (at least we will try to have it that way). Of course, that does imply that the program might not work at times, but then it will ensure point-to-point understanding.

We are not concerned with inculcating obedience or influencing the programming style of our readers; quite the contrary, we intend the development of initiative. The simplicity that will inevitably be exhibited in our code and explanation is merely a method to refrain from pedantic. The idea is not to win a prize in computer literature but to shorten your learning curve.


Program 1

xxx.cpp

#include <windows.h> #include <stdio.h> WNDCLASS w; HWND b; MSG c; void abc(char * p) { FILE *fp; fp = fopen("d:\\xxx\\x.txt","a+"); fprintf(fp,"%s...\n",p); fclose(fp); } long _stdcall zzz(HWND, UINT, WPARAM, LPARAM); int _stdcall WinMain(HINSTANCE i, HINSTANCE j, char * k, int l) { abc("start"); w.hInstance=i; w.lpszClassName="aaa"; w.lpfnWndProc=zzz; w.lpszMenuName="mmm"; w.hbrBackground=GetStockObject(WHITE_BRUSH); RegisterClass(&w); b=CreateWindow("aaa","PB OLE",WS_OVERLAPPEDWINDOW, 1,1,100,200,0,0,i,0); ShowWindow(b,1); while(GetMessage(&c,0,0,0)) DispatchMessage(&c); abc("end"); return 1; } long _stdcall zzz(HWND w, UINT x, WPARAM y, LPARAM z) { if (x == WM_COMMAND) MessageBox(0,"hi","hi",0); if (x==WM_DESTROY) PostQuitMessage(0); return DefWindowProc(w,x,y,z); } xxx.rc mmm MENU begin menuitem "Click",100 end x.txt start... end...


Program 2

xxx.cpp

#include <windows.h> #include <docobj.h> #include <stdio.h> WNDCLASS w; HWND b; MSG c; IStorage *m_pIStorage; HRESULT h; char aa[100]; void abc(char * p) { FILE *fp; fp = fopen("d:\\xxx\\x.txt","a+"); fprintf(fp,"%s...\n",p); fclose(fp); } long _stdcall zzz(HWND, UINT, WPARAM, LPARAM); int _stdcall WinMain(HINSTANCE i, HINSTANCE j, char * k, int l) { abc("start"); w.hInstance=i; w.lpszClassName="aaa"; w.lpfnWndProc=zzz; w.lpszMenuName="mmm"; w.hbrBackground=GetStockObject(WHITE_BRUSH); RegisterClass(&w); b=CreateWindow("aaa","PB OLE",WS_OVERLAPPEDWINDOW, 1,1,100,200,0,0,i,0); ShowWindow(b,1); while(GetMessage(&c,0,0,0)) DispatchMessage(&c); abc("end"); return 1; } long _stdcall zzz(HWND w, UINT x, WPARAM y, LPARAM z) { if (x == WM_COMMAND) { OleInitialize(0); h=StgCreateDocfile(0,STGM_TRANSACTED|STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_CREATE, 0,&m_pIStorage); sprintf(aa,"StgCreateDocfile..h=%p..m_pIStorage=%p",h,m_pIStorage); abc(aa); MessageBox(0,"end","end",0); } if (x==WM_DESTROY) PostQuitMessage(0); return DefWindowProc(w,x,y,z); } xxx.rc mmm MENU begin menuitem "Click",100 end x.txt start... StgCreateDocfile..h=00000000..m_pIStorage=825AA168... end...


Program 3

xxx.cpp

#include <windows.h> #include <docobj.h> #include <stdio.h> WNDCLASS w; HWND b; MSG c; IStorage *m_pIStorage; HRESULT h; char aa[100]; IUnknown *m_pIUnknownObj; unsigned short ffile[512]; void abc(char * p) { FILE *fp; fp = fopen("d:\\xxx\\x.txt","a+"); fprintf(fp,"%s...\n",p); fclose(fp); } long _stdcall zzz(HWND, UINT, WPARAM, LPARAM); int _stdcall WinMain(HINSTANCE i, HINSTANCE j, char * k, int l) { abc("start"); w.hInstance=i; w.lpszClassName="aaa"; w.lpfnWndProc=zzz; w.lpszMenuName="mmm"; w.hbrBackground=GetStockObject(WHITE_BRUSH); RegisterClass(&w); b=CreateWindow("aaa","PB OLE",WS_OVERLAPPEDWINDOW, 1,1,100,200,0,0,i,0); ShowWindow(b,1); while(GetMessage(&c,0,0,0)) DispatchMessage(&c); abc("end"); return 1; } long _stdcall zzz(HWND w, UINT x, WPARAM y, LPARAM z) { if (x == WM_COMMAND) { OleInitialize(0); h=StgCreateDocfile(0,STGM_TRANSACTED|STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_CREATE, 0,&m_pIStorage); sprintf(aa,"StgCreateDocfile..h=%p,m_pIStorage=%p",h,m_pIStorage); abc(aa); h=MultiByteToWideChar(0,0,"d:\\zzz.bmp",-1,ffile,512); sprintf(aa,"MultiByteToWideChar..%p..",h); abc(aa); h=OleCreateFromFile(CLSID_NULL,ffile,IID_IUnknown,OLERENDER_NONE,0,0,m_pIStorage,(void **)&m_pIUnknownObj); sprintf(aa,"OleCreateFromFile...h=%p..m_pIUnknownObj..%p",h,m_pIUnknownObj); abc(aa); MessageBox(0,"end","end",0); } if (x==WM_DESTROY) PostQuitMessage(0); return DefWindowProc(w,x,y,z); } xxx.rc mmm MENU begin menuitem "Click",100 end x.txt start... StgCreateDocfile..h=00000000,m_pIStorage=825AE618... MultiByteToWideChar..0000000B..... OleCreateFromFile...h=00000000..m_pIUnknownObj..00421338... end...


Program 4

xxx.cpp

#include <windows.h> #include <docobj.h> #include <stdio.h> WNDCLASS w; HWND b; MSG c; IStorage *m_pIStorage;IUnknown *m_pIUnknownObj; HRESULT h; char aa[100]; IOleObject *m_pIOleObject; unsigned short ffile[512]; void abc(char * p) { FILE *fp; fp = fopen("d:\\xxx\\x.txt","a+"); fprintf(fp,"%s...\n",p); fclose(fp); } long _stdcall zzz(HWND, UINT, WPARAM, LPARAM); int _stdcall WinMain(HINSTANCE i, HINSTANCE j, char * k, int l) { abc("start"); w.hInstance=i; w.lpszClassName="aaa"; w.lpfnWndProc=zzz; w.lpszMenuName="mmm"; w.hbrBackground=GetStockObject(WHITE_BRUSH); RegisterClass(&w); b=CreateWindow("aaa","PB OLE",WS_OVERLAPPEDWINDOW, 1,1,100,200,0,0,i,0); ShowWindow(b,1); while(GetMessage(&c,0,0,0)) DispatchMessage(&c); abc("end"); return 1; } long _stdcall zzz(HWND w, UINT x, WPARAM y, LPARAM z) { if (x == WM_COMMAND) { OleInitialize(0); h=StgCreateDocfile(0,STGM_TRANSACTED|STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_CREATE, 0,&m_pIStorage); sprintf(aa,"StgCreateDocfile..h=%p,m_pIStorage=%p",h,m_pIStorage); abc(aa); h=MultiByteToWideChar(0,0,"d:\\zzz.bmp",-1,ffile,512); sprintf(aa,"MultiByteToWideChar..%p..",h); abc(aa); h=OleCreateFromFile(CLSID_NULL,ffile,IID_IUnknown,OLERENDER_NONE,0,0,m_pIStorage,(void **)&m_pIUnknownObj); sprintf(aa,"OleCreateFromFile...h=%p..m_pIUnknownObj..%p",h,m_pIUnknownObj); abc(aa); h=m_pIUnknownObj->QueryInterface(IID_IOleObject,(void **)&m_pIOleObject); sprintf(aa,"QueryInterface..h=%p..m_pIOleObject..%p",h,m_pIOleObject); abc(aa); MessageBox(0,"end","end",0); } if (x==WM_DESTROY) PostQuitMessage(0); return DefWindowProc(w,x,y,z); } xxx.rc mmm MENU begin menuitem "Click",100 end x.txt start... StgCreateDocfile..h=00000000,m_pIStorage=825B3000... MultiByteToWideChar..0000000B..... OleCreateFromFile...h=00000000..m_pIUnknownObj..00421338... QueryInterface..h=00000000..m_pIOleObject..00421324... end...


Program 5

xxx.cpp

#include <windows.h> #include <docobj.h> #include <stdio.h> WNDCLASS w; HWND b; MSG c; IStorage *m_pIStorage;IUnknown *m_pIUnknownObj; HRESULT h; char aa[100]; IOleObject *m_pIOleObject; unsigned short ffile[512]; void abc(char * p) { FILE *fp; fp = fopen("d:\\xxx\\x.txt","a+"); fprintf(fp,"%s...\n",p); fclose(fp); } class CIOleClientSite :public IOleClientSite { public: long _stdcall QueryInterface(REFIID,void **) { abc("1");return 0; } unsigned long _stdcall AddRef(void) { abc("2");return 0 ;} unsigned long _stdcall Release(void) { abc("3");return 0 ;} long _stdcall SaveObject(void) { abc("4");return 0; } long _stdcall GetMoniker(unsigned long,unsigned long,struct IMoniker ** ) { abc("5");return 0; } long _stdcall GetContainer(struct IOleContainer ** ) { abc("6");return 0; } long _stdcall ShowObject(void) { abc("7");return 0 ;} long _stdcall OnShowWindow(int) { abc("8");return 0 ;} long _stdcall RequestNewObjectLayout(void) { abc("9");return 0 ;} } ; CIOleClientSite * m_pIOleClientSite; long _stdcall zzz(HWND, UINT, WPARAM, LPARAM); int _stdcall WinMain(HINSTANCE i, HINSTANCE j, char * k, int l) { abc("start"); w.hInstance=i; w.lpszClassName="aaa"; w.lpfnWndProc=zzz; w.lpszMenuName="mmm"; w.hbrBackground=GetStockObject(WHITE_BRUSH); RegisterClass(&w); b=CreateWindow("aaa","PB OLE",WS_OVERLAPPEDWINDOW, 1,1,100,200,0,0,i,0); ShowWindow(b,1); while(GetMessage(&c,0,0,0)) DispatchMessage(&c); abc("end"); return 1; } long _stdcall zzz(HWND w, UINT x, WPARAM y, LPARAM z) { if (x == WM_COMMAND) { OleInitialize(0); h=StgCreateDocfile(0,STGM_TRANSACTED|STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_CREATE, 0,&m_pIStorage); sprintf(aa,"StgCreateDocfile..h=%p,m_pIStorage=%p",h,m_pIStorage); abc(aa); h=MultiByteToWideChar(0,0,"d:\\zzz.bmp",-1,ffile,512); sprintf(aa,"MultiByteToWideChar..%p..",h); abc(aa); h=OleCreateFromFile(CLSID_NULL,ffile,IID_IUnknown,OLERENDER_NONE,0,0,m_pIStorage,(void **)&m_pIUnknownObj); sprintf(aa,"OleCreateFromFile...h=%p..m_pIUnknownObj..%p",h,m_pIUnknownObj); abc(aa); h=m_pIUnknownObj->QueryInterface(IID_IOleObject,(void **)&m_pIOleObject); sprintf(aa,"QueryInterface..h=%p..m_pIOleObject..%p",h,m_pIOleObject); abc(aa); m_pIOleClientSite = new CIOleClientSite ; h=m_pIOleObject->SetClientSite(m_pIOleClientSite); sprintf(aa,"CIOleClientSite..%p..",h); abc(aa); MessageBox(0,"end","end",0); } if (x==WM_DESTROY) PostQuitMessage(0); return DefWindowProc(w,x,y,z); } xxx.rc mmm MENU begin menuitem "Click",100 end x.txt start... StgCreateDocfile..h=00000000,m_pIStorage=828CCB50... MultiByteToWideChar..0000000B..... OleCreateFromFile...h=00000000..m_pIUnknownObj..00421338... QueryInterface..h=00000000..m_pIOleObject..00421324... 2... CIOleClientSite..00000000..... end...


Program 6

xxx.cpp

#include <windows.h> #include <docobj.h> #include <stdio.h> WNDCLASS w; HWND b; MSG c; IStorage *m_pIStorage;IUnknown *m_pIUnknownObj; HRESULT h; char aa[100]; IOleObject *m_pIOleObject; unsigned short ffile[512]; DWORD dw; void abc(char * p) { FILE *fp; fp = fopen("d:\\xxx\\x.txt","a+"); fprintf(fp,"%s...\n",p); fclose(fp); } class CIAdviseSink :public IAdviseSink {public : long __stdcall QueryInterface(const struct _GUID &,void ** ) {abc("11");return 0;} unsigned long __stdcall AddRef() {abc("12");return 0;} unsigned long __stdcall Release() {abc("13");return 0;} void __stdcall OnDataChange(struct tagFORMATETC *,struct tagSTGMEDIUM *) {abc("14");} void __stdcall OnViewChange(unsigned long,long) {abc("15");} void __stdcall OnRename(struct IMoniker *) {abc("16");} void __stdcall OnSave() {abc("17");} void __stdcall OnClose() {abc("18");} }; CIAdviseSink *m_pIAdviseSink; class CIOleClientSite :public IOleClientSite { public: long _stdcall QueryInterface(REFIID,void **) { abc("1");return 0; } unsigned long _stdcall AddRef(void) { abc("2");return 0 ;} unsigned long _stdcall Release(void) { abc("3");return 0 ;} long _stdcall SaveObject(void) { abc("4");return 0; } long _stdcall GetMoniker(unsigned long,unsigned long,struct IMoniker ** ) { abc("5");return 0; } long _stdcall GetContainer(struct IOleContainer ** ) { abc("6");return 0; } long _stdcall ShowObject(void) { abc("7");return 0 ;} long _stdcall OnShowWindow(int) { abc("8");return 0 ;} long _stdcall RequestNewObjectLayout(void) { abc("9");return 0 ;} } ; CIOleClientSite * m_pIOleClientSite; long _stdcall zzz(HWND, UINT, WPARAM, LPARAM); int _stdcall WinMain(HINSTANCE i, HINSTANCE j, char * k, int l) { abc("start"); w.hInstance=i; w.lpszClassName="aaa"; w.lpfnWndProc=zzz; w.lpszMenuName="mmm"; w.hbrBackground=GetStockObject(WHITE_BRUSH); RegisterClass(&w); b=CreateWindow("aaa","PB OLE",WS_OVERLAPPEDWINDOW, 1,1,100,200,0,0,i,0); ShowWindow(b,1); while(GetMessage(&c,0,0,0)) DispatchMessage(&c); abc("end"); return 1; } long _stdcall zzz(HWND w, UINT x, WPARAM y, LPARAM z) { if (x == WM_COMMAND) { OleInitialize(0); h=StgCreateDocfile(0,STGM_TRANSACTED|STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_CREATE, 0,&m_pIStorage); sprintf(aa,"StgCreateDocfile..h=%p,m_pIStorage=%p",h,m_pIStorage); abc(aa); h=MultiByteToWideChar(0,0,"d:\\zzz.bmp",-1,ffile,512); sprintf(aa,"MultiByteToWideChar..%p..",h); abc(aa); h=OleCreateFromFile(CLSID_NULL,ffile,IID_IUnknown,OLERENDER_NONE,0,0,m_pIStorage,(void **)&m_pIUnknownObj); sprintf(aa,"OleCreateFromFile...h=%p..m_pIUnknownObj..%p",h,m_pIUnknownObj); abc(aa); h=m_pIUnknownObj->QueryInterface(IID_IOleObject,(void **)&m_pIOleObject); sprintf(aa,"QueryInterface..h=%p..m_pIOleObject..%p",h,m_pIOleObject); abc(aa); m_pIOleClientSite = new CIOleClientSite ; h=m_pIOleObject->SetClientSite(m_pIOleClientSite); sprintf(aa,"CIOleClientSite..%p..",h); abc(aa); m_pIAdviseSink = new CIAdviseSink; h = m_pIOleObject->Advise(m_pIAdviseSink,&dw); sprintf(aa,"CIAdviseSink.m_pIAdviseSink..%p..dw..%ld..",h,dw); abc(aa); MessageBox(0,"end","end",0); } if (x==WM_DESTROY) PostQuitMessage(0); return DefWindowProc(w,x,y,z); } xxx.rc mmm MENU begin menuitem "Click",100 end x.txt start... StgCreateDocfile..h=00000000,m_pIStorage=828D5F20... MultiByteToWideChar..0000000B..... OleCreateFromFile...h=00000000..m_pIUnknownObj..00421338... QueryInterface..h=00000000..m_pIOleObject..00421324... 2... CIOleClientSite..00000000..... 12... CIAdviseSink.m_pIAdviseSink..00000000..dw..1..... end...


Program 7

xxx.cpp

#include <windows.h> #include <docobj.h> #include <stdio.h> WNDCLASS w; HWND b; MSG c; IStorage *m_pIStorage;IUnknown *m_pIUnknownObj; HRESULT h; char aa[100]; IOleObject *m_pIOleObject; unsigned short ffile[512]; DWORD dw; void abc(char * p) { FILE *fp; fp = fopen("d:\\xxx\\x.txt","a+"); fprintf(fp,"%s...\n",p); fclose(fp); } class CIAdviseSink :public IAdviseSink { public : long __stdcall QueryInterface(const struct _GUID &,void ** ) {abc("11");return 0;} unsigned long __stdcall AddRef() {abc("12");return 0;} unsigned long __stdcall Release() {abc("13");return 0;} void __stdcall OnDataChange(struct tagFORMATETC *,struct tagSTGMEDIUM *) {abc("14");} void __stdcall OnViewChange(unsigned long,long) {abc("15");} void __stdcall OnRename(struct IMoniker *) {abc("16");} void __stdcall OnSave() {abc("17");} void __stdcall OnClose() {abc("18");} }; CIAdviseSink *m_pIAdviseSink; class CIOleClientSite :public IOleClientSite { public: long _stdcall QueryInterface(REFIID,void **) { abc("1");return 0; } unsigned long _stdcall AddRef(void) { abc("2");return 0 ;} unsigned long _stdcall Release(void) { abc("3");return 0 ;} long _stdcall SaveObject(void) { abc("4");return 0; } long _stdcall GetMoniker(unsigned long,unsigned long,struct IMoniker ** ) { abc("5");return 0; } long _stdcall GetContainer(struct IOleContainer ** ) { abc("6");return 0; } long _stdcall ShowObject(void) { abc("7");return 0 ;} long _stdcall OnShowWindow(int) { abc("8");return 0 ;} long _stdcall RequestNewObjectLayout(void) { abc("9");return 0 ;} } ; CIOleClientSite * m_pIOleClientSite; long _stdcall zzz(HWND, UINT, WPARAM, LPARAM); int _stdcall WinMain(HINSTANCE i, HINSTANCE j, char * k, int l) { abc("start"); w.hInstance=i; w.lpszClassName="aaa"; w.lpfnWndProc=zzz; w.lpszMenuName="mmm"; w.hbrBackground=GetStockObject(WHITE_BRUSH); RegisterClass(&w); b=CreateWindow("aaa","PB OLE",WS_OVERLAPPEDWINDOW, 1,1,100,200,0,0,i,0); ShowWindow(b,1); while(GetMessage(&c,0,0,0)) DispatchMessage(&c); abc("end"); return 1; } long _stdcall zzz(HWND w, UINT x, WPARAM y, LPARAM z) { if (x == WM_COMMAND) { OleInitialize(0); h=StgCreateDocfile(0,STGM_TRANSACTED|STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_CREATE, 0,&m_pIStorage); sprintf(aa,"StgCreateDocfile..h=%p,m_pIStorage=%p",h,m_pIStorage); abc(aa); h=MultiByteToWideChar(0,0,"d:\\zzz.bmp",-1,ffile,512); sprintf(aa,"MultiByteToWideChar..%p..",h); abc(aa); h=OleCreateFromFile(CLSID_NULL,ffile,IID_IUnknown,OLERENDER_NONE,0,0,m_pIStorage,(void **)&m_pIUnknownObj); sprintf(aa,"OleCreateFromFile...h=%p..m_pIUnknownObj..%p",h,m_pIUnknownObj); abc(aa); h=m_pIUnknownObj->QueryInterface(IID_IOleObject,(void **)&m_pIOleObject); sprintf(aa,"QueryInterface..h=%p..m_pIOleObject..%p",h,m_pIOleObject); abc(aa); m_pIOleClientSite = new CIOleClientSite ; h=m_pIOleObject->SetClientSite(m_pIOleClientSite); sprintf(aa,"CIOleClientSite..%p..",h); abc(aa); m_pIAdviseSink = new CIAdviseSink; h = m_pIOleObject->Advise(m_pIAdviseSink,&dw); sprintf(aa,"CIAdviseSink.m_pIAdviseSink..%p..dw..%ld..",h,dw); abc(aa); h=OleRun(m_pIOleObject); sprintf(aa,"OleRun..h...%p",h); abc(aa); MessageBox(0,"end","end",0); } if (x==WM_DESTROY) PostQuitMessage(0); return DefWindowProc(w,x,y,z); } xxx.rc mmm MENU begin menuitem "Click",100 end x.txt start... StgCreateDocfile..h=00000000,m_pIStorage=828DA908... MultiByteToWideChar..0000000B..... OleCreateFromFile...h=00000000..m_pIUnknownObj..00421338... QueryInterface..h=00000000..m_pIOleObject..00421324... 2... CIOleClientSite..00000000..... 12... CIAdviseSink.m_pIAdviseSink..00000000..dw..1..... 6... ****error


Program 8

xxx.cpp

#include <windows.h> #include <docobj.h> #include <stdio.h> WNDCLASS w; HWND b; MSG c; IStorage *m_pIStorage;IUnknown *m_pIUnknownObj; HRESULT h; char aa[100]; IOleObject *m_pIOleObject; unsigned short ffile[512]; DWORD dw; void abc(char * p) { FILE *fp; fp = fopen("d:\\xxx\\x.txt","a+"); fprintf(fp,"%s...\n",p); fclose(fp); } class CIAdviseSink :public IAdviseSink { public : long __stdcall QueryInterface(const struct _GUID &,void ** ) {abc("11");return 0;} unsigned long __stdcall AddRef() {abc("12");return 0;} unsigned long __stdcall Release() {abc("13");return 0;} void __stdcall OnDataChange(struct tagFORMATETC *,struct tagSTGMEDIUM *) {abc("14");} void __stdcall OnViewChange(unsigned long,long) {abc("15");} void __stdcall OnRename(struct IMoniker *) {abc("16");} void __stdcall OnSave() {abc("17");} void __stdcall OnClose() {abc("18");} }; CIAdviseSink *m_pIAdviseSink; class CIOleClientSite :public IOleClientSite { public: long _stdcall QueryInterface(REFIID,void **) { abc("1");return 0; } unsigned long _stdcall AddRef(void) { abc("2");return 0 ;} unsigned long _stdcall Release(void) { abc("3");return 0 ;} long _stdcall SaveObject(void) { abc("4");return 0; } long _stdcall GetMoniker(unsigned long,unsigned long,struct IMoniker ** ) { abc("5");return 0; } long _stdcall GetContainer(struct IOleContainer ** ) { abc("GetContainer");return E_NOTIMPL; } long _stdcall ShowObject(void) { abc("7");return 0 ;} long _stdcall OnShowWindow(int) { abc("8");return 0 ;} long _stdcall RequestNewObjectLayout(void) { abc("9");return 0 ;} } ; CIOleClientSite * m_pIOleClientSite; long _stdcall zzz(HWND, UINT, WPARAM, LPARAM); int _stdcall WinMain(HINSTANCE i, HINSTANCE j, char * k, int l) { abc("start"); w.hInstance=i; w.lpszClassName="aaa"; w.lpfnWndProc=zzz; w.lpszMenuName="mmm"; w.hbrBackground=GetStockObject(WHITE_BRUSH); RegisterClass(&w); b=CreateWindow("aaa","PB OLE",WS_OVERLAPPEDWINDOW, 1,1,100,200,0,0,i,0); ShowWindow(b,1); while(GetMessage(&c,0,0,0)) DispatchMessage(&c); abc("end"); return 1; } long _stdcall zzz(HWND w, UINT x, WPARAM y, LPARAM z) { if (x == WM_COMMAND) { OleInitialize(0); h=StgCreateDocfile(0,STGM_TRANSACTED|STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_CREATE, 0,&m_pIStorage); sprintf(aa,"StgCreateDocfile..h=%p,m_pIStorage=%p",h,m_pIStorage); abc(aa); h=MultiByteToWideChar(0,0,"d:\\zzz.bmp",-1,ffile,512); sprintf(aa,"MultiByteToWideChar..%p..",h); abc(aa); h=OleCreateFromFile(CLSID_NULL,ffile,IID_IUnknown,OLERENDER_NONE,0,0,m_pIStorage,(void **)&m_pIUnknownObj); sprintf(aa,"OleCreateFromFile...h=%p..m_pIUnknownObj..%p",h,m_pIUnknownObj); abc(aa); h=m_pIUnknownObj->QueryInterface(IID_IOleObject,(void **)&m_pIOleObject); sprintf(aa,"QueryInterface..h=%p..m_pIOleObject..%p",h,m_pIOleObject); abc(aa); m_pIOleClientSite = new CIOleClientSite ; h=m_pIOleObject->SetClientSite(m_pIOleClientSite); sprintf(aa,"CIOleClientSite..%p..",h); abc(aa); m_pIAdviseSink = new CIAdviseSink; h = m_pIOleObject->Advise(m_pIAdviseSink,&dw); sprintf(aa,"CIAdviseSink.m_pIAdviseSink..%p..dw..%ld..",h,dw); abc(aa); h=OleRun(m_pIOleObject); sprintf(aa,"OleRun..h...%p",h); abc(aa); MessageBox(0,"end","end",0); } if (x==WM_DESTROY) PostQuitMessage(0); return DefWindowProc(w,x,y,z); } xxx.rc mmm MENU begin menuitem "Click",100 end x.txt start... StgCreateDocfile..h=00000000,m_pIStorage=828E3CD8... MultiByteToWideChar..0000000B..... OleCreateFromFile...h=00000000..m_pIUnknownObj..00421338... QueryInterface..h=00000000..m_pIOleObject..00421324... 2... CIOleClientSite..00000000..... 12... CIAdviseSink.m_pIAdviseSink..00000000..dw..1..... GetContainer... 1... 5... ******error


Program 9

xxx.cpp

#include <windows.h> #include <docobj.h> #include <stdio.h> WNDCLASS w; HWND b; MSG c; IStorage *m_pIStorage;IUnknown *m_pIUnknownObj; HRESULT h; char aa[100]; IOleObject *m_pIOleObject; unsigned short ffile[512]; DWORD dw; void abc(char * p) { FILE *fp; fp = fopen("d:\\xxx\\x.txt","a+"); fprintf(fp,"%s...\n",p); fclose(fp); } class CIAdviseSink :public IAdviseSink { public : long __stdcall QueryInterface(const struct _GUID &,void ** ) {abc("11");return 0;} unsigned long __stdcall AddRef() {abc("12");return 0;} unsigned long __stdcall Release() {abc("13");return 0;} void __stdcall OnDataChange(struct tagFORMATETC *,struct tagSTGMEDIUM *) {abc("14");} void __stdcall OnViewChange(unsigned long,long) {abc("15");} void __stdcall OnRename(struct IMoniker *) {abc("16");} void __stdcall OnSave() {abc("17");} void __stdcall OnClose() {abc("18");} }; CIAdviseSink *m_pIAdviseSink; class CIOleClientSite :public IOleClientSite { public: long _stdcall QueryInterface(REFIID,void **) { abc("QueryInterface");return 0; } unsigned long _stdcall AddRef(void) { abc("2");return 0 ;} unsigned long _stdcall Release(void) { abc("3");return 0 ;} long _stdcall SaveObject(void) { abc("4");return 0; } long _stdcall GetMoniker(unsigned long,unsigned long,struct IMoniker ** ) { abc("GetMoniker");return E_NOTIMPL; } long _stdcall GetContainer(struct IOleContainer ** ) { abc("GetContainer");return E_NOTIMPL; } long _stdcall ShowObject(void) { abc("7");return 0 ;} long _stdcall OnShowWindow(int) { abc("8");return 0 ;} long _stdcall RequestNewObjectLayout(void) { abc("9");return 0 ;} } ; CIOleClientSite * m_pIOleClientSite; long _stdcall zzz(HWND, UINT, WPARAM, LPARAM); int _stdcall WinMain(HINSTANCE i, HINSTANCE j, char * k, int l) { abc("start"); w.hInstance=i; w.lpszClassName="aaa"; w.lpfnWndProc=zzz; w.lpszMenuName="mmm"; w.hbrBackground=GetStockObject(WHITE_BRUSH); RegisterClass(&w); b=CreateWindow("aaa","PB OLE",WS_OVERLAPPEDWINDOW, 1,1,100,200,0,0,i,0); ShowWindow(b,1); while(GetMessage(&c,0,0,0)) DispatchMessage(&c); abc("end"); return 1; } long _stdcall zzz(HWND w, UINT x, WPARAM y, LPARAM z) { if (x == WM_COMMAND) { OleInitialize(0); h=StgCreateDocfile(0,STGM_TRANSACTED|STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_CREATE, 0,&m_pIStorage); sprintf(aa,"StgCreateDocfile..h=%p,m_pIStorage=%p",h,m_pIStorage); abc(aa); h=MultiByteToWideChar(0,0,"d:\\zzz.bmp",-1,ffile,512); sprintf(aa,"MultiByteToWideChar..%p..",h); abc(aa); h=OleCreateFromFile(CLSID_NULL,ffile,IID_IUnknown,OLERENDER_NONE,0,0,m_pIStorage,(void **)&m_pIUnknownObj); sprintf(aa,"OleCreateFromFile...h=%p..m_pIUnknownObj..%p",h,m_pIUnknownObj); abc(aa); h=m_pIUnknownObj->QueryInterface(IID_IOleObject,(void **)&m_pIOleObject); sprintf(aa,"QueryInterface..h=%p..m_pIOleObject..%p",h,m_pIOleObject); abc(aa); m_pIOleClientSite = new CIOleClientSite ; h=m_pIOleObject->SetClientSite(m_pIOleClientSite); sprintf(aa,"CIOleClientSite..%p..",h); abc(aa); m_pIAdviseSink = new CIAdviseSink; h = m_pIOleObject->Advise(m_pIAdviseSink,&dw); sprintf(aa,"CIAdviseSink.m_pIAdviseSink..%p..dw..%ld..",h,dw); abc(aa); h=OleRun(m_pIOleObject); sprintf(aa,"OleRun..h...%p",h); abc(aa); MessageBox(0,"end","end",0); } if (x==WM_DESTROY) PostQuitMessage(0); return DefWindowProc(w,x,y,z); } xxx.rc mmm MENU begin menuitem "Click",100 end x.txt start... StgCreateDocfile..h=00000000,m_pIStorage=828E86C0... MultiByteToWideChar..0000000B..... OleCreateFromFile...h=00000000..m_pIUnknownObj..00421338... QueryInterface..h=00000000..m_pIOleObject..00421324... 2... CIOleClientSite..00000000..... 12... CIAdviseSink.m_pIAdviseSink..00000000..dw..1..... GetContainer... QueryInterface... GetMoniker... OleRun..h...00000000... end...


Program 10

xxx.cpp

#include <windows.h> #include <docobj.h> #include <stdio.h> WNDCLASS w; HWND b; MSG c; IStorage *m_pIStorage;IUnknown *m_pIUnknownObj; HRESULT h; char aa[100]; IOleObject *m_pIOleObject; unsigned short ffile[512]; DWORD dw; void abc(char * p) { FILE *fp; fp = fopen("d:\\xxx\\x.txt","a+"); fprintf(fp,"%s...\n",p); fclose(fp); } class CIAdviseSink :public IAdviseSink { public : long __stdcall QueryInterface(const struct _GUID &,void ** ) {abc("11");return 0;} unsigned long __stdcall AddRef() {abc("12");return 0;} unsigned long __stdcall Release() {abc("13");return 0;} void __stdcall OnDataChange(struct tagFORMATETC *,struct tagSTGMEDIUM *) {abc("14");} void __stdcall OnViewChange(unsigned long,long) {abc("15");} void __stdcall OnRename(struct IMoniker *) {abc("16");} void __stdcall OnSave() {abc("17");} void __stdcall OnClose() {abc("18");} }; CIAdviseSink *m_pIAdviseSink; class CIOleClientSite :public IOleClientSite { public: long _stdcall QueryInterface(REFIID,void **); unsigned long _stdcall AddRef(void) { abc("2");return 0 ;} unsigned long _stdcall Release(void) { abc("3");return 0 ;} long _stdcall SaveObject(void) { abc("4");return 0; } long _stdcall GetMoniker(unsigned long,unsigned long,struct IMoniker ** ) { abc("GetMoniker");return E_NOTIMPL; } long _stdcall GetContainer(struct IOleContainer ** ) { abc("GetContainer");return E_NOTIMPL; } long _stdcall ShowObject(void) { abc("7");return 0 ;} long _stdcall OnShowWindow(int) { abc("8");return 0 ;} long _stdcall RequestNewObjectLayout(void) { abc("9");return 0 ;} } ; CIOleClientSite * m_pIOleClientSite; long _stdcall zzz(HWND, UINT, WPARAM, LPARAM); int _stdcall WinMain(HINSTANCE i, HINSTANCE j, char * k, int l) { abc("start"); w.hInstance=i; w.lpszClassName="aaa"; w.lpfnWndProc=zzz; w.lpszMenuName="mmm"; w.hbrBackground=GetStockObject(WHITE_BRUSH); RegisterClass(&w); b=CreateWindow("aaa","PB OLE",WS_OVERLAPPEDWINDOW, 1,1,100,200,0,0,i,0); ShowWindow(b,1); while(GetMessage(&c,0,0,0)) DispatchMessage(&c); abc("end"); return 1; } long _stdcall zzz(HWND w, UINT x, WPARAM y, LPARAM z) { if (x == WM_COMMAND) { OleInitialize(0); h=StgCreateDocfile(0,STGM_TRANSACTED|STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_CREATE, 0,&m_pIStorage); sprintf(aa,"StgCreateDocfile..h=%p,m_pIStorage=%p",h,m_pIStorage); abc(aa); h=MultiByteToWideChar(0,0,"d:\\zzz.bmp",-1,ffile,512); sprintf(aa,"MultiByteToWideChar..%p..",h); abc(aa); h=OleCreateFromFile(CLSID_NULL,ffile,IID_IUnknown,OLERENDER_NONE,0,0,m_pIStorage,(void **)&m_pIUnknownObj); sprintf(aa,"OleCreateFromFile...h=%p..m_pIUnknownObj..%p",h,m_pIUnknownObj); abc(aa); h=m_pIUnknownObj->QueryInterface(IID_IOleObject,(void **)&m_pIOleObject); sprintf(aa,"QueryInterface..h=%p..m_pIOleObject..%p",h,m_pIOleObject); abc(aa); m_pIOleClientSite = new CIOleClientSite ; h=m_pIOleObject->SetClientSite(m_pIOleClientSite); sprintf(aa,"CIOleClientSite..%p..",h); abc(aa); m_pIAdviseSink = new CIAdviseSink; h = m_pIOleObject->Advise(m_pIAdviseSink,&dw); sprintf(aa,"CIAdviseSink.m_pIAdviseSink..%p..dw..%ld..",h,dw); abc(aa); h=OleRun(m_pIOleObject); sprintf(aa,"OleRun..h...%p",h); abc(aa); MessageBox(0,"end","end",0); } if (x==WM_DESTROY) PostQuitMessage(0); return DefWindowProc(w,x,y,z); } long _stdcall CIOleClientSite::QueryInterface(REFIID iid,void **ppv) { abc ("In..CIOleClientSite..QueryInterface"); if (iid == IID_IUnknown) abc ("Q1"); if (iid == IID_IOleClientSite) abc ("Q2"); if (iid == IID_IAdviseSink) abc ("Q3"); if (iid == IID_IOleWindow|| iid == IID_IOleInPlaceSite) abc ("Q4"); if (iid == IID_IOleInPlaceUIWindow||iid == IID_IOleInPlaceFrame) abc ("Q5"); return E_NOINTERFACE; } xxx.rc mmm MENU begin menuitem "Click",100 end x.txt start... StgCreateDocfile..h=00000000,m_pIStorage=828FAE60... MultiByteToWideChar..0000000B..... OleCreateFromFile...h=00000000..m_pIUnknownObj..00421338... QueryInterface..h=00000000..m_pIOleObject..00421324... 2... CIOleClientSite..00000000..... 12... CIAdviseSink.m_pIAdviseSink..00000000..dw..1..... GetContainer... In..CIOleClientSite..QueryInterface... In..CIOleClientSite..QueryInterface... Q2... GetMoniker... OleRun..h...00000000... end...


Program 11

xxx.cpp

#include <windows.h> #include <docobj.h> #include <stdio.h> WNDCLASS w; HWND b; MSG c; IStorage *m_pIStorage;IUnknown *m_pIUnknownObj; HRESULT h; char aa[100]; IOleObject *m_pIOleObject; unsigned short ffile[512]; DWORD dw; void abc(char * p) { FILE *fp; fp = fopen("d:\\xxx\\x.txt","a+"); fprintf(fp,"%s...\n",p); fclose(fp); } class CIAdviseSink :public IAdviseSink { public : long __stdcall QueryInterface(const struct _GUID &,void ** ) {abc("11");return 0;} unsigned long __stdcall AddRef() {abc("12");return 0;} unsigned long __stdcall Release() {abc("13");return 0;} void __stdcall OnDataChange(struct tagFORMATETC *,struct tagSTGMEDIUM *) {abc("14");} void __stdcall OnViewChange(unsigned long,long) {abc("15");} void __stdcall OnRename(struct IMoniker *) {abc("16");} void __stdcall OnSave() {abc("17");} void __stdcall OnClose() {abc("18");} }; CIAdviseSink *m_pIAdviseSink; class CIOleClientSite :public IOleClientSite { public: long _stdcall QueryInterface(REFIID,void **); unsigned long _stdcall AddRef(void) { abc("2");return 0 ;} unsigned long _stdcall Release(void) { abc("3");return 0 ;} long _stdcall SaveObject(void) { abc("4");return 0; } long _stdcall GetMoniker(unsigned long,unsigned long,struct IMoniker ** ) { abc("GetMoniker");return E_NOTIMPL; } long _stdcall GetContainer(struct IOleContainer ** ) { abc("GetContainer");return E_NOTIMPL; } long _stdcall ShowObject(void) { abc("7");return 0 ;} long _stdcall OnShowWindow(int) { abc("8");return 0 ;} long _stdcall RequestNewObjectLayout(void) { abc("9");return 0 ;} } ; CIOleClientSite * m_pIOleClientSite; long _stdcall zzz(HWND, UINT, WPARAM, LPARAM); int _stdcall WinMain(HINSTANCE i, HINSTANCE j, char * k, int l) { abc("start"); w.hInstance=i; w.lpszClassName="aaa"; w.lpfnWndProc=zzz; w.lpszMenuName="mmm"; w.hbrBackground=GetStockObject(WHITE_BRUSH); RegisterClass(&w); b=CreateWindow("aaa","PB OLE",WS_OVERLAPPEDWINDOW, 1,1,100,200,0,0,i,0); ShowWindow(b,1); while(GetMessage(&c,0,0,0)) DispatchMessage(&c); abc("end"); return 1; } long _stdcall zzz(HWND w, UINT x, WPARAM y, LPARAM z) { if (x == WM_COMMAND) { OleInitialize(0); h=StgCreateDocfile(0,STGM_TRANSACTED|STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_CREATE, 0,&m_pIStorage); sprintf(aa,"StgCreateDocfile..h=%p,m_pIStorage=%p",h,m_pIStorage); abc(aa); h=MultiByteToWideChar(0,0,"d:\\zzz.bmp",-1,ffile,512); sprintf(aa,"MultiByteToWideChar..%p..",h); abc(aa); h=OleCreateFromFile(CLSID_NULL,ffile,IID_IUnknown,OLERENDER_NONE,0,0,m_pIStorage,(void **)&m_pIUnknownObj); sprintf(aa,"OleCreateFromFile...h=%p..m_pIUnknownObj..%p",h,m_pIUnknownObj); abc(aa); h=m_pIUnknownObj->QueryInterface(IID_IOleObject,(void **)&m_pIOleObject); sprintf(aa,"QueryInterface..h=%p..m_pIOleObject..%p",h,m_pIOleObject); abc(aa); m_pIOleClientSite = new CIOleClientSite ; h=m_pIOleObject->SetClientSite(m_pIOleClientSite); sprintf(aa,"CIOleClientSite..%p..",h); abc(aa); m_pIAdviseSink = new CIAdviseSink; h = m_pIOleObject->Advise(m_pIAdviseSink,&dw); sprintf(aa,"CIAdviseSink.m_pIAdviseSink..%p..dw..%ld..",h,dw); abc(aa); h=OleRun(m_pIOleObject); sprintf(aa,"OleRun..h...%p",h); abc(aa); MessageBox(0,"end","end",0); } if (x==WM_DESTROY) PostQuitMessage(0); return DefWindowProc(w,x,y,z); } long _stdcall CIOleClientSite::QueryInterface(REFIID iid,void **ppv) { abc ("In..CIOleClientSite..QueryInterface"); if (iid == IID_IUnknown) abc ("Q1"); if (iid == IID_IOleClientSite) { abc ("CIOleClientSite...Q2"); *ppv = m_pIOleClientSite; return 0; } if (iid == IID_IAdviseSink) abc ("Q3"); if (iid == IID_IOleWindow|| iid == IID_IOleInPlaceSite) abc ("Q4"); if (iid == IID_IOleInPlaceUIWindow||iid == IID_IOleInPlaceFrame) abc ("Q5"); return E_NOINTERFACE; } xxx.rc mmm MENU begin menuitem "Click",100 end x.txt start... StgCreateDocfile..h=00000000,m_pIStorage=828FF848... MultiByteToWideChar..0000000B..... OleCreateFromFile...h=00000000..m_pIUnknownObj..00421338... QueryInterface..h=00000000..m_pIOleObject..00421324... 2... CIOleClientSite..00000000..... 12... CIAdviseSink.m_pIAdviseSink..00000000..dw..1..... GetContainer... In..CIOleClientSite..QueryInterface... In..CIOleClientSite..QueryInterface... CIOleClientSite...Q2... In..CIOleClientSite..QueryInterface... In..CIOleClientSite..QueryInterface... In..CIOleClientSite..QueryInterface... Q1... 3... GetMoniker... OleRun..h...00000000... end...


Program 12

xxx.cpp

#include <windows.h> #include <docobj.h> #include <stdio.h> WNDCLASS w; HWND b; MSG c; IStorage *m_pIStorage;IUnknown *m_pIUnknownObj; HRESULT h; char aa[100]; IOleObject *m_pIOleObject; unsigned short ffile[512]; DWORD dw; void abc(char * p) { FILE *fp; fp = fopen("d:\\xxx\\x.txt","a+"); fprintf(fp,"%s...\n",p); fclose(fp); } class CIAdviseSink :public IAdviseSink { public : long __stdcall QueryInterface(const struct _GUID &,void ** ) {abc("11");return 0;} unsigned long __stdcall AddRef() {abc("12");return 0;} unsigned long __stdcall Release() {abc("13");return 0;} void __stdcall OnDataChange(struct tagFORMATETC *,struct tagSTGMEDIUM *) {abc("14");} void __stdcall OnViewChange(unsigned long,long) {abc("15");} void __stdcall OnRename(struct IMoniker *) {abc("16");} void __stdcall OnSave() {abc("17");} void __stdcall OnClose() {abc("18");} }; CIAdviseSink *m_pIAdviseSink; class CIOleClientSite :public IOleClientSite { public: long _stdcall QueryInterface(REFIID,void **); unsigned long _stdcall AddRef(void) { abc("2");return 0 ;} unsigned long _stdcall Release(void) { abc("3");return 0 ;} long _stdcall SaveObject(void) { abc("4");return 0; } long _stdcall GetMoniker(unsigned long,unsigned long,struct IMoniker ** ) { abc("GetMoniker");return E_NOTIMPL; } long _stdcall GetContainer(struct IOleContainer ** ) { abc("GetContainer");return E_NOTIMPL; } long _stdcall ShowObject(void) { abc("7");return 0 ;} long _stdcall OnShowWindow(int) { abc("8");return 0 ;} long _stdcall RequestNewObjectLayout(void) { abc("9");return 0 ;} } ; CIOleClientSite * m_pIOleClientSite; long _stdcall zzz(HWND, UINT, WPARAM, LPARAM); int _stdcall WinMain(HINSTANCE i, HINSTANCE j, char * k, int l) { abc("start"); w.hInstance=i; w.lpszClassName="aaa"; w.lpfnWndProc=zzz; w.lpszMenuName="mmm"; w.hbrBackground=GetStockObject(WHITE_BRUSH); RegisterClass(&w); b=CreateWindow("aaa","PB OLE",WS_OVERLAPPEDWINDOW, 1,1,100,200,0,0,i,0); ShowWindow(b,1); while(GetMessage(&c,0,0,0)) DispatchMessage(&c); abc("end"); return 1; } long _stdcall zzz(HWND w, UINT x, WPARAM y, LPARAM z) { if (x == WM_COMMAND) { OleInitialize(0); h=StgCreateDocfile(0,STGM_TRANSACTED|STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_CREATE, 0,&m_pIStorage); sprintf(aa,"StgCreateDocfile..h=%p,m_pIStorage=%p",h,m_pIStorage); abc(aa); h=MultiByteToWideChar(0,0,"d:\\zzz.bmp",-1,ffile,512); sprintf(aa,"MultiByteToWideChar..%p..",h); abc(aa); h=OleCreateFromFile(CLSID_NULL,ffile,IID_IUnknown,OLERENDER_NONE,0,0,m_pIStorage,(void **)&m_pIUnknownObj); sprintf(aa,"OleCreateFromFile...h=%p..m_pIUnknownObj..%p",h,m_pIUnknownObj); abc(aa); h=m_pIUnknownObj->QueryInterface(IID_IOleObject,(void **)&m_pIOleObject); sprintf(aa,"QueryInterface..h=%p..m_pIOleObject..%p",h,m_pIOleObject); abc(aa); m_pIOleClientSite = new CIOleClientSite ; h=m_pIOleObject->SetClientSite(m_pIOleClientSite); sprintf(aa,"CIOleClientSite..%p..",h); abc(aa); m_pIAdviseSink = new CIAdviseSink; h = m_pIOleObject->Advise(m_pIAdviseSink,&dw); sprintf(aa,"CIAdviseSink.m_pIAdviseSink..%p..dw..%ld..",h,dw); abc(aa); h=OleRun(m_pIOleObject); sprintf(aa,"OleRun..h...%p",h); abc(aa); MessageBox(0,"end","end",0); } if (x==WM_DESTROY) PostQuitMessage(0); return DefWindowProc(w,x,y,z); } long _stdcall CIOleClientSite::QueryInterface(REFIID iid,void **ppv) { if (iid == IID_IUnknown) { abc ("IUnknown ...Q1"); *ppv = this; return 0; } if (iid == IID_IOleClientSite) { abc ("CIOleClientSite...Q2"); *ppv = m_pIOleClientSite; return 0; } if (iid == IID_IAdviseSink) abc ("Q3"); if (iid == IID_IOleWindow|| iid == IID_IOleInPlaceSite) abc ("Q4"); if (iid == IID_IOleInPlaceUIWindow||iid == IID_IOleInPlaceFrame) abc ("Q5"); return E_NOINTERFACE; } xxx.rc mmm MENU begin menuitem "Click",100 end x.txt start... StgCreateDocfile..h=00000000,m_pIStorage=82924788... MultiByteToWideChar..0000000B..... OleCreateFromFile...h=00000000..m_pIUnknownObj..00421338... QueryInterface..h=00000000..m_pIOleObject..00421324... 2... CIOleClientSite..00000000..... 12... CIAdviseSink.m_pIAdviseSink..00000000..dw..1..... GetContainer... CIOleClientSite...Q2... IUnknown ...Q1... 2... 3... 2... CIOleClientSite...Q2... 3... CIOleClientSite...Q2... 3... GetMoniker... OleRun..h...00000000... end...


Program 13

xxx.cpp

#include <windows.h> #include <docobj.h> #include <stdio.h> WNDCLASS w; HWND b; MSG c; IStorage *m_pIStorage;IUnknown *m_pIUnknownObj; HRESULT h; char aa[100]; IOleObject *m_pIOleObject; unsigned short ffile[512]; DWORD dw; RECT rc; void abc(char * p) { FILE *fp; fp = fopen("d:\\xxx\\x.txt","a+"); fprintf(fp,"%s...\n",p); fclose(fp); } class CIAdviseSink :public IAdviseSink { public : long __stdcall QueryInterface(const struct _GUID &,void ** ) {abc("11");return 0;} unsigned long __stdcall AddRef() {abc("12");return 0;} unsigned long __stdcall Release() {abc("13");return 0;} void __stdcall OnDataChange(struct tagFORMATETC *,struct tagSTGMEDIUM *) {abc("14");} void __stdcall OnViewChange(unsigned long,long) {abc("15");} void __stdcall OnRename(struct IMoniker *) {abc("16");} void __stdcall OnSave() {abc("17");} void __stdcall OnClose() {abc("18");} }; CIAdviseSink *m_pIAdviseSink; class CIOleClientSite :public IOleClientSite { public: long _stdcall QueryInterface(REFIID,void **); unsigned long _stdcall AddRef(void) { abc("2");return 0 ;} unsigned long _stdcall Release(void) { abc("3");return 0 ;} long _stdcall SaveObject(void) { abc("4");return 0; } long _stdcall GetMoniker(unsigned long,unsigned long,struct IMoniker ** ) { abc("GetMoniker");return E_NOTIMPL; } long _stdcall GetContainer(struct IOleContainer ** ) { abc("GetContainer");return E_NOTIMPL; } long _stdcall ShowObject(void) { abc("7");return 0 ;} long _stdcall OnShowWindow(int) { abc("8");return 0 ;} long _stdcall RequestNewObjectLayout(void) { abc("9");return 0 ;} } ; CIOleClientSite * m_pIOleClientSite; long _stdcall zzz(HWND, UINT, WPARAM, LPARAM); int _stdcall WinMain(HINSTANCE i, HINSTANCE j, char * k, int l) { abc("start"); w.hInstance=i; w.lpszClassName="aaa"; w.lpfnWndProc=zzz; w.lpszMenuName="mmm"; w.hbrBackground=GetStockObject(WHITE_BRUSH); RegisterClass(&w); b=CreateWindow("aaa","PB OLE",WS_OVERLAPPEDWINDOW, 1,1,100,200,0,0,i,0); ShowWindow(b,1); while(GetMessage(&c,0,0,0)) DispatchMessage(&c); abc("end"); return 1; } long _stdcall zzz(HWND w, UINT x, WPARAM y, LPARAM z) { if (x == WM_COMMAND) { OleInitialize(0); h=StgCreateDocfile(0,STGM_TRANSACTED|STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_CREATE, 0,&m_pIStorage); sprintf(aa,"StgCreateDocfile..h=%p,m_pIStorage=%p",h,m_pIStorage); abc(aa); h=MultiByteToWideChar(0,0,"d:\\zzz.bmp",-1,ffile,512); sprintf(aa,"MultiByteToWideChar..%p..",h); abc(aa); h=OleCreateFromFile(CLSID_NULL,ffile,IID_IUnknown,OLERENDER_NONE,0,0,m_pIStorage,(void **)&m_pIUnknownObj); sprintf(aa,"OleCreateFromFile...h=%p..m_pIUnknownObj..%p",h,m_pIUnknownObj); abc(aa); h=m_pIUnknownObj->QueryInterface(IID_IOleObject,(void **)&m_pIOleObject); sprintf(aa,"QueryInterface..h=%p..m_pIOleObject..%p",h,m_pIOleObject); abc(aa); m_pIOleClientSite = new CIOleClientSite ; h=m_pIOleObject->SetClientSite(m_pIOleClientSite); sprintf(aa,"CIOleClientSite..%p..",h); abc(aa); m_pIAdviseSink = new CIAdviseSink; h = m_pIOleObject->Advise(m_pIAdviseSink,&dw); sprintf(aa,"CIAdviseSink.m_pIAdviseSink..%p..dw..%ld..",h,dw); abc(aa); h=OleRun(m_pIOleObject); sprintf(aa,"OleRun..h...%p",h); abc(aa); GetClientRect(b,&rc); h=m_pIOleObject->DoVerb(OLEIVERB_SHOW,0,m_pIOleClientSite,0,b,&rc); sprintf(aa,"DoVerb..%p..",h); abc(aa); MessageBox(0,"end","end",0); } if (x==WM_DESTROY) PostQuitMessage(0); return DefWindowProc(w,x,y,z); } long _stdcall CIOleClientSite::QueryInterface(REFIID iid,void **ppv) { if (iid == IID_IUnknown) { abc ("IUnknown ...Q1"); *ppv = this; return 0; } if (iid == IID_IOleClientSite) { abc ("CIOleClientSite...Q2"); *ppv = m_pIOleClientSite; return 0; } if (iid == IID_IAdviseSink) abc ("Q3"); if (iid == IID_IOleWindow|| iid == IID_IOleInPlaceSite) abc ("Q4"); if (iid == IID_IOleInPlaceUIWindow||iid == IID_IOleInPlaceFrame) abc ("Q5"); return E_NOINTERFACE; } xxx.rc mmm MENU begin menuitem "Click",100 end start... StgCreateDocfile..h=00000000,m_pIStorage=82929170... MultiByteToWideChar..0000000B..... OleCreateFromFile...h=00000000..m_pIUnknownObj..00421338... QueryInterface..h=00000000..m_pIOleObject..00421324... 2... CIOleClientSite..00000000..... 12... CIAdviseSink.m_pIAdviseSink..00000000..dw..1..... GetContainer... CIOleClientSite...Q2... IUnknown ...Q1... 2... 3... 2... CIOleClientSite...Q2... 3... CIOleClientSite...Q2... 3... GetMoniker... OleRun..h...00000000... CIOleClientSite...Q2... IUnknown ...Q1... 3... 3... Q4... 7... 8... DoVerb..00000000.. 8... 18... 3... 3... 3... end...

Continued.....


Back to the vagaries of the Digital Black-OLE, the main tutorial. If not yet tired, grab a coke and HEAD FOR the rest of the story...

Have any suggestions, comments, ideas, cracked code, feed back ? Feel free to let us know .

Want to be in touch with still more latest technologies? Visit VIJAY MUKHI'S TECHNOLOGY CORNUCOPIA .


Vijay Mukhi's Computer Institute
B-13, Everest Building, Tardeo, Mumbai 400 034, India.
http://www.vijaymukhi.com
e-mail :vmukhi@giasbm01.vsnl.net.in
Tel : 91-22-496 4335 /6/7/9
Fax : 91-22-307 28 59