COleVariant and LPDISPATCH
Ted -- tward@geographix.com Tuesday, April 23, 1996 Can someone explain why this happens: I am calling an inproc OLE Automation dll from within an OCX and I am passing it an LPDISPATCH which is contained in an COleVariant. I am doing nothing with the dispatch pointer in the dll, simply returning. I release the LPDISPATCH pointer in my OCX, and get a return of 0 from Release(). However when the COleVariant goes out of scope I get an access error. However, if I first reset the COleVariant to (LPDISPATCH)NULL, everything is hunky dory. It took me 2 days to figure out this damn problem, but I still don't know why it is happening. NT 3.51, VC 4.1. Ted Ward tward@geographix.com Denver, Colorado
John & Annette Elsbree -- elsbree@msn.com Monday, April 29, 1996 Ted - Have a look at the MFC source code... COleVariant::~COleVariant calls the VariantClear API. VariantClear releases the IDispatch pointer, provided the pointer is non-NULL and the variant's type is VT_DISPATCH. So, you're causing the IDispatch pointer to be released too many times. Perhaps the easiest fix is to just avoid releasing the pointer yourself, and letting the destructor do the work for you. John (not speaking for Microsoft) ---------- From: owner-mfc-l@netcom.com on behalf of Ward, Ted I am calling an inproc OLE Automation dll from within an OCX and I am passing it an LPDISPATCH which is contained in an COleVariant. I am doing nothing with the dispatch pointer in the dll, simply returning. I release the LPDISPATCH pointer in my OCX, and get a return of 0 from Release(). However when the COleVariant goes out of scope I get an access error. However, if I first reset the COleVariant to (LPDISPATCH)NULL, everything is hunky dory.
Ted -- tward@geographix.com Tuesday, April 30, 1996 But I tried just not releasing, and I was getting memory leaks. If I set the COleVariant to VT_NULL, and release the dispatch myself, I get no leaks. Ted Ward tward@geographix.com Denver, Colorado ---------- From: mfc-l[SMTP:mfc-l@netcom.com] Sent: Tuesday, April 30, 1996 9:07 AM To: MFC List Subject: RE: COleVariant and LPDISPATCH Ted - Have a look at the MFC source code... COleVariant::~COleVariant calls the VariantClear API. VariantClear releases the IDispatch pointer, provided the pointer is non-NULL and the variant's type is VT_DISPATCH. So, you're causing the IDispatch pointer to be released too many times. Perhaps the easiest fix is to just avoid releasing the pointer yourself, and letting the destructor do the work for you. John (not speaking for Microsoft) ---------- From: owner-mfc-l@netcom.com on behalf of Ward, Ted I am calling an inproc OLE Automation dll from within an OCX and I am passing it an LPDISPATCH which is contained in an COleVariant. I am doing nothing with the dispatch pointer in the dll, simply returning. I release the LPDISPATCH pointer in my OCX, and get a return of 0 from Release(). However when the COleVariant goes out of scope I get an access error. However, if I first reset the COleVariant to (LPDISPATCH)NULL, everything is hunky dory.
Phillip Thoren -- pthoren@synervision.com Thursday, May 02, 1996 I have a tool called VisionSoft/CHECK, CHECK++ than may find this particular problem! regards, VisionSoft - http://www.synervision.com ---Message from "Ward, Ted"on Tue, 30 Apr 1996 10:26:00 -0600 --- But I tried just not releasing, and I was getting memory leaks. If I set the COleVariant to VT_NULL, and release the dispatch myself, I get no leaks. Ted Ward tward@geographix.com Denver, Colorado ---------- From: mfc-l[SMTP:mfc-l@netcom.com] Sent: Tuesday, April 30, 1996 9:07 AM To: MFC List Subject: RE: COleVariant and LPDISPATCH Ted - Have a look at the MFC source code... COleVariant::~COleVariant calls the VariantClear API. VariantClear releases the IDispatch pointer, provided the pointer is non-NULL and the variant's type is VT_DISPATCH. So, you're causing the IDispatch pointer to be released too many times. Perhaps the easiest fix is to just avoid releasing the pointer yourself, and letting the destructor do the work for you. John (not speaking for Microsoft) ---------- From: owner-mfc-l@netcom.com on behalf of Ward, Ted I am calling an inproc OLE Automation dll from within an OCX and I am passing it an LPDISPATCH which is contained in an COleVariant. I am doing nothing with the dispatch pointer in the dll, simply returning. I release the LPDISPATCH pointer in my OCX, and get a return of 0 from Release(). However when the COleVariant goes out of scope I get an access error. However, if I first reset the COleVariant to (LPDISPATCH)NULL, everything is hunky dory. -----------------End of Original Message----------------- ------------------------------------- Phil Thoren VisionSoft Corporation, 1999 S Bascom Ave, Suite 700, Campbell, CA, USA, 95008-9872 pthoren@synervision.com (Phillip Thoren), http://www.synervision.com 5/2/96, 8:13:56 AM "Software Quality, the Internet and Beyond" TEST, CHECK/CHECK++, DataVision(tm), PERFORM, REMOTE, WebView(tm), WebTour(tm), Web sites of interest: www.wrs.com, www.webvalley.com -------------------------------------
| Вернуться в корень Архива |