Changeset 6648 for trunk/src/ole32/oleobj.c
- Timestamp:
- Sep 5, 2001, 3:19:02 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/ole32/oleobj.c
r5602 r6648 1 /* $Id: oleobj.c,v 1.2 2001-09-05 13:17:11 bird Exp $ */ 1 2 /* 2 * 3 * OLE2 COM objects 3 4 * 4 * 5 * Copyright 1998 Eric Kohl 5 6 * Copyright 1999 Francis Beaudet 6 7 */ … … 71 72 72 73 lpoah= (OleAdviseHolderImpl*)HeapAlloc(GetProcessHeap(), 73 74 75 74 0, 75 sizeof(OleAdviseHolderImpl)); 76 76 77 ICOM_VTBL(lpoah) = &oahvt; 77 78 lpoah->ref = 1; 78 79 lpoah->maxSinks = INITIAL_SINKS; 79 80 lpoah->arrayOfSinks = HeapAlloc(GetProcessHeap(), 80 81 81 0, 82 lpoah->maxSinks * sizeof(IAdviseSink*)); 82 83 83 84 for (index = 0; index < lpoah->maxSinks; index++) … … 105 106 } 106 107 } 107 108 108 109 HeapFree(GetProcessHeap(), 109 110 111 110 0, 111 ptrToDestroy->arrayOfSinks); 112 112 113 113 114 HeapFree(GetProcessHeap(), 114 115 115 0, 116 ptrToDestroy); 116 117 } 117 118 … … 121 122 static HRESULT WINAPI OleAdviseHolderImpl_QueryInterface( 122 123 LPOLEADVISEHOLDER iface, 123 REFIID riid, 124 REFIID riid, 124 125 LPVOID* ppvObj) 125 126 { 126 ICOM_THIS(OleAdviseHolderImpl, iface); 127 ICOM_THIS(OleAdviseHolderImpl, iface); 127 128 TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(riid),ppvObj); 128 129 /* … … 134 135 *ppvObj = NULL; 135 136 136 if (IsEqualIID(riid, &IID_IUnknown)) 137 if (IsEqualIID(riid, &IID_IUnknown)) 137 138 { 138 139 /* IUnknown */ 139 *ppvObj = This; 140 } 141 else if(IsEqualIID(riid, &IID_IOleAdviseHolder)) 140 *ppvObj = This; 141 } 142 else if(IsEqualIID(riid, &IID_IOleAdviseHolder)) 142 143 { 143 144 /* IOleAdviseHolder */ … … 147 148 if(*ppvObj == NULL) 148 149 return E_NOINTERFACE; 149 150 150 151 /* 151 152 * A successful QI always increments the reference count. … … 162 163 LPOLEADVISEHOLDER iface) 163 164 { 164 ICOM_THIS(OleAdviseHolderImpl, iface); 165 TRACE("(%p)->(ref=%ld)\n", This, This->ref); 165 ICOM_THIS(OleAdviseHolderImpl, iface); 166 TRACE("(%p)->(ref=%ld)\n", This, This->ref); 166 167 return ++(This->ref); 167 168 } … … 173 174 LPOLEADVISEHOLDER iface) 174 175 { 175 ICOM_THIS(OleAdviseHolderImpl, iface); 176 TRACE("(%p)->(ref=%ld)\n", This, This->ref); 176 ICOM_THIS(OleAdviseHolderImpl, iface); 177 TRACE("(%p)->(ref=%ld)\n", This, This->ref); 177 178 This->ref--; 178 179 … … 196 197 { 197 198 DWORD index; 198 199 ICOM_THIS(OleAdviseHolderImpl, iface); 199 200 ICOM_THIS(OleAdviseHolderImpl, iface); 200 201 201 202 TRACE("(%p)->(%p, %p)\n", This, pAdvise, pdwConnection); … … 206 207 if (pdwConnection==NULL) 207 208 return E_POINTER; 208 209 209 210 *pdwConnection = 0; 210 211 … … 227 228 This->maxSinks+=INITIAL_SINKS; 228 229 229 This->arrayOfSinks = HeapReAlloc(GetProcessHeap(), 230 231 232 230 This->arrayOfSinks = HeapReAlloc(GetProcessHeap(), 231 0, 232 This->arrayOfSinks, 233 This->maxSinks*sizeof(IAdviseSink*)); 233 234 234 235 for (i=index;i < This->maxSinks; i++) 235 This->arrayOfSinks[i]=0; 236 This->arrayOfSinks[i]=0; 236 237 } 237 238 … … 258 259 */ 259 260 static HRESULT WINAPI OleAdviseHolderImpl_Unadvise( 260 LPOLEADVISEHOLDER iface, 261 LPOLEADVISEHOLDER iface, 261 262 DWORD dwConnection) 262 263 { 263 ICOM_THIS(OleAdviseHolderImpl, iface); 264 ICOM_THIS(OleAdviseHolderImpl, iface); 264 265 265 266 TRACE("(%p)->(%lu)\n", This, dwConnection); 266 267 267 268 /* 268 * So we don't return 0 as a cookie, the index was 269 * So we don't return 0 as a cookie, the index was 269 270 * incremented by 1 in OleAdviseHolderImpl_Advise 270 271 * we have to compensate. 271 272 */ 272 273 dwConnection--; 273 274 274 275 /* 275 276 * Check for invalid cookies. 276 277 */ 277 if ( (dwConnection < 0) || 278 if ( (dwConnection < 0) || 278 279 (dwConnection >= This->maxSinks) ) 279 280 return OLE_E_NOCONNECTION; … … 297 298 OleAdviseHolderImpl_EnumAdvise (LPOLEADVISEHOLDER iface, IEnumSTATDATA **ppenumAdvise) 298 299 { 299 ICOM_THIS(OleAdviseHolderImpl, iface); 300 ICOM_THIS(OleAdviseHolderImpl, iface); 300 301 FIXME("(%p)->(%p)\n", This, ppenumAdvise); 301 302 … … 311 312 OleAdviseHolderImpl_SendOnRename (LPOLEADVISEHOLDER iface, IMoniker *pmk) 312 313 { 313 ICOM_THIS(OleAdviseHolderImpl, iface); 314 ICOM_THIS(OleAdviseHolderImpl, iface); 314 315 FIXME("(%p)->(%p)\n", This, pmk); 315 316 … … 324 325 OleAdviseHolderImpl_SendOnSave (LPOLEADVISEHOLDER iface) 325 326 { 326 ICOM_THIS(OleAdviseHolderImpl, iface); 327 ICOM_THIS(OleAdviseHolderImpl, iface); 327 328 FIXME("(%p)\n", This); 328 329 … … 336 337 OleAdviseHolderImpl_SendOnClose (LPOLEADVISEHOLDER iface) 337 338 { 338 ICOM_THIS(OleAdviseHolderImpl, iface); 339 ICOM_THIS(OleAdviseHolderImpl, iface); 339 340 FIXME("(%p)\n", This); 340 341 … … 350 351 FORMATETC fmat; 351 352 DWORD advf; 352 } DataAdviseConnection; 353 } DataAdviseConnection; 353 354 354 355 typedef struct DataAdviseHolder … … 367 368 static void DataAdviseHolder_Destructor(DataAdviseHolder* ptrToDestroy); 368 369 static HRESULT WINAPI DataAdviseHolder_QueryInterface( 369 370 371 372 static ULONG WINAPI DataAdviseHolder_AddRef( 370 IDataAdviseHolder* iface, 371 REFIID riid, 372 void** ppvObject); 373 static ULONG WINAPI DataAdviseHolder_AddRef( 373 374 IDataAdviseHolder* iface); 374 static ULONG WINAPI DataAdviseHolder_Release( 375 static ULONG WINAPI DataAdviseHolder_Release( 375 376 IDataAdviseHolder* iface); 376 static HRESULT WINAPI DataAdviseHolder_Advise( 377 static HRESULT WINAPI DataAdviseHolder_Advise( 377 378 IDataAdviseHolder* iface, 378 IDataObject* pDataObject, 379 FORMATETC* pFetc, 380 DWORD advf, 381 IAdviseSink* pAdvise, 382 383 static HRESULT WINAPI DataAdviseHolder_Unadvise( 379 IDataObject* pDataObject, 380 FORMATETC* pFetc, 381 DWORD advf, 382 IAdviseSink* pAdvise, 383 DWORD* pdwConnection); 384 static HRESULT WINAPI DataAdviseHolder_Unadvise( 384 385 IDataAdviseHolder* iface, 385 386 static HRESULT WINAPI DataAdviseHolder_EnumAdvise( 387 IDataAdviseHolder* iface, 388 389 static HRESULT WINAPI DataAdviseHolder_SendOnDataChange( 390 IDataAdviseHolder* iface, 391 IDataObject* pDataObject, 392 DWORD dwReserved, 393 386 DWORD dwConnection); 387 static HRESULT WINAPI DataAdviseHolder_EnumAdvise( 388 IDataAdviseHolder* iface, 389 IEnumSTATDATA** ppenumAdvise); 390 static HRESULT WINAPI DataAdviseHolder_SendOnDataChange( 391 IDataAdviseHolder* iface, 392 IDataObject* pDataObject, 393 DWORD dwReserved, 394 DWORD advf); 394 395 395 396 /************************************************************************** … … 416 417 417 418 newHolder = (DataAdviseHolder*)HeapAlloc(GetProcessHeap(), 418 419 420 419 0, 420 sizeof(DataAdviseHolder)); 421 421 422 ICOM_VTBL(newHolder) = &DataAdviseHolderImpl_VTable; 422 423 newHolder->ref = 1; 423 424 newHolder->maxCons = INITIAL_SINKS; 424 425 newHolder->Connections = HeapAlloc(GetProcessHeap(), 425 426 newHolder->maxCons * 427 426 HEAP_ZERO_MEMORY, 427 newHolder->maxCons * 428 sizeof(DataAdviseConnection)); 428 429 429 430 TRACE("returning %p\n", newHolder); … … 447 448 } 448 449 } 449 450 450 451 HeapFree(GetProcessHeap(), 0, ptrToDestroy->Connections); 451 452 HeapFree(GetProcessHeap(), 0, ptrToDestroy); … … 462 463 void** ppvObject) 463 464 { 464 ICOM_THIS(DataAdviseHolder, iface); 465 ICOM_THIS(DataAdviseHolder, iface); 465 466 TRACE("(%p)->(%s,%p)\n",This,debugstr_guid(riid),ppvObject); 466 467 /* … … 469 470 if ( (This==0) || (ppvObject==0) ) 470 471 return E_INVALIDARG; 471 472 472 473 /* 473 474 * Initialize the return parameter. … … 483 484 *ppvObject = iface; 484 485 } 485 486 486 487 /* 487 488 * Check that we obtained an interface. … … 491 492 return E_NOINTERFACE; 492 493 } 493 494 494 495 /* 495 496 * Query Interface always increases the reference count by one when it is 496 * successful. 497 * successful. 497 498 */ 498 499 IUnknown_AddRef((IUnknown*)*ppvObject); 499 500 500 return S_OK;; 501 return S_OK;; 501 502 } 502 503 … … 506 507 * See Windows documentation for more details on IUnknown methods. 507 508 */ 508 static ULONG WINAPI DataAdviseHolder_AddRef( 509 static ULONG WINAPI DataAdviseHolder_AddRef( 509 510 IDataAdviseHolder* iface) 510 511 { 511 ICOM_THIS(DataAdviseHolder, iface); 512 ICOM_THIS(DataAdviseHolder, iface); 512 513 TRACE("(%p) (ref=%ld)\n", This, This->ref); 513 514 This->ref++; … … 521 522 * See Windows documentation for more details on IUnknown methods. 522 523 */ 523 static ULONG WINAPI DataAdviseHolder_Release( 524 static ULONG WINAPI DataAdviseHolder_Release( 524 525 IDataAdviseHolder* iface) 525 526 { … … 541 542 return 0; 542 543 } 543 544 544 545 return This->ref; 545 546 } … … 551 552 static HRESULT WINAPI DataAdviseHolder_Advise( 552 553 IDataAdviseHolder* iface, 553 IDataObject* pDataObject, 554 FORMATETC* pFetc, 555 DWORD advf, 556 IAdviseSink* pAdvise, 554 IDataObject* pDataObject, 555 FORMATETC* pFetc, 556 DWORD advf, 557 IAdviseSink* pAdvise, 557 558 DWORD* pdwConnection) 558 559 { 559 560 DWORD index; 560 561 ICOM_THIS(DataAdviseHolder, iface); 561 562 ICOM_THIS(DataAdviseHolder, iface); 562 563 563 564 TRACE("(%p)->(%p, %p, %08lx, %p, %p)\n", This, pDataObject, pFetc, advf, 564 565 pAdvise, pdwConnection); 565 566 /* 566 567 * Sanity check … … 568 569 if (pdwConnection==NULL) 569 570 return E_POINTER; 570 571 571 572 *pdwConnection = 0; 572 573 … … 587 588 This->maxCons+=INITIAL_SINKS; 588 589 This->Connections = HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 589 590 590 This->Connections, 591 This->maxCons*sizeof(DataAdviseConnection)); 591 592 } 592 593 /* … … 616 617 * DataAdviseHolder_Unadvise 617 618 */ 618 static HRESULT WINAPI DataAdviseHolder_Unadvise( 619 static HRESULT WINAPI DataAdviseHolder_Unadvise( 619 620 IDataAdviseHolder* iface, 620 621 DWORD dwConnection) 621 622 { 622 ICOM_THIS(DataAdviseHolder, iface); 623 ICOM_THIS(DataAdviseHolder, iface); 623 624 624 625 TRACE("(%p)->(%lu)\n", This, dwConnection); 625 626 626 627 /* 627 * So we don't return 0 as a cookie, the index was 628 * So we don't return 0 as a cookie, the index was 628 629 * incremented by 1 in OleAdviseHolderImpl_Advise 629 630 * we have to compensate. 630 631 */ 631 632 dwConnection--; 632 633 633 634 /* 634 635 * Check for invalid cookies. 635 636 */ 636 if ( (dwConnection < 0) || 637 if ( (dwConnection < 0) || 637 638 (dwConnection >= This->maxCons) ) 638 639 return OLE_E_NOCONNECTION; … … 649 650 } 650 651 651 static HRESULT WINAPI DataAdviseHolder_EnumAdvise( 652 IDataAdviseHolder* iface, 652 static HRESULT WINAPI DataAdviseHolder_EnumAdvise( 653 IDataAdviseHolder* iface, 653 654 IEnumSTATDATA** ppenumAdvise) 654 655 { 655 ICOM_THIS(DataAdviseHolder, iface); 656 ICOM_THIS(DataAdviseHolder, iface); 656 657 657 658 FIXME("(%p)->(%p)\n", This, ppenumAdvise); … … 662 663 * DataAdviseHolder_SendOnDataChange 663 664 */ 664 static HRESULT WINAPI DataAdviseHolder_SendOnDataChange( 665 IDataAdviseHolder* iface, 666 IDataObject* pDataObject, 667 DWORD dwReserved, 665 static HRESULT WINAPI DataAdviseHolder_SendOnDataChange( 666 IDataAdviseHolder* iface, 667 IDataObject* pDataObject, 668 DWORD dwReserved, 668 669 DWORD advf) 669 670 { 670 ICOM_THIS(DataAdviseHolder, iface); 671 ICOM_THIS(DataAdviseHolder, iface); 671 672 DWORD index; 672 673 STGMEDIUM stg; … … 678 679 if(This->Connections[index].sink != NULL) { 679 680 if(!(This->Connections[index].advf & ADVF_NODATA)) { 680 681 682 683 684 681 TRACE("Calling IDataObject_GetData\n"); 682 res = IDataObject_GetData(pDataObject, 683 &(This->Connections[index].fmat), 684 &stg); 685 TRACE("returns %08lx\n", res); 685 686 } 686 687 TRACE("Calling IAdviseSink_OnDataChange\n"); 687 688 IAdviseSink_OnDataChange(This->Connections[index].sink, 688 689 689 &(This->Connections[index].fmat), 690 &stg); 690 691 TRACE("Done IAdviseSink_OnDataChange\n"); 691 692 if(This->Connections[index].advf & ADVF_ONLYONCE) { 692 693 693 TRACE("Removing connection\n"); 694 DataAdviseHolder_Unadvise(iface, index+1); 694 695 } 695 696 }
Note:
See TracChangeset
for help on using the changeset viewer.