[comp.windows.ms] Problem with EnumProps + RemoveProps

mdh@beach.cis.ufl.edu (Mark Hampton) (01/13/89)

I am having a problem with EnumProps. In the MS Windows Programmer's 
Reference, section 2.2.17, it is implied that EnumProp may be used in 
conjunction with RemoveProps to remove all properties attached to a window. 
Well, when I run a program that does just that under the debugging version
of windows (V2.03, Windows/386), and this is what I get:

LocalFree: Freeing locked object 0000:0AE2
FatalExit code = 0x01F0    [this translates to LocalUnlock count underflow]
Stack trace:
KERNEL!IGROUP:REPLACEINST+057A
KERNEL!IGROUP:LOCALFREE+006C
USER!_TEXT:SHOWCURSOR+0175
5C01:2492                  [this is the RemoveProps function, listed below]   
USER!_TEXT:ENUMPROPS
etc.

The RemoveProps function is simply:
 
int FAR PASCAL RemoveProps (HWND hWnd, WORD wDummy, PSTR szProp,
                            HANDLE hData)
   {
   RemoveProp (hWnd, szProp);
   return TRUE;
   }

void DestroyWnd (HWND hWnd)
   {
   FARPROC lpfnEnumProc;
   HWND    hActiveChild;

   hActiveChild = GetProp (hMainWnd, ACTIVE_WND);
   if(hActiveChild == hWnd)
      {
      SetProp (hMainWnd, ACTIVE_WND, NULL);
      }

   lpfnEnumProc = MakeProcInstance (RemoveProps, hMainInstance);
   EnumProps (hWnd, lpfnEnumProc);
   FreeProcInstance (lpfnEnumProc);
   }

(and RemoveProps is listed in the exports part of the .DEF file.)
DestroyWnd is called when a WM_DESTROY message is received by a window.
It seems to me that EnumProps locks the memory used for the text of the
string, and when it attempts to free it, bad things happen. I was
wondering if anyone else has encountered this, and if there is a simple
way (other than making a list of all properties and then freeing them
when the EnumProp call is done).

Thanks in advance.
Mark Hampton
--
----------------------------------------------------------------------------
In Real Life: Mark Hampton  | Internet: mdh@beach.cis.ufl.edu
                            | UUCP: ...gatech!uflorida!beach.cis.ufl.edu!mdh
----------------------------------------------------------------------------