Hi Jeff,

Jeff Latimer wrote:
This is the first installment of the implementation of MkParseDisplayName. I would like feed back on style and usage.

I think the implementation of the EnumMoniker interface looks ok. Comments appreciated.

I like that you've taken the time to write a test case! I don't know alot about monikers, but seeing that you've tested it gives me confidence...


The following comments are a crash course in Wine programming...

+/***********************************************************************
+ *        EnmumMoniker_Next
+ */
+HRESULT   WINAPI EnumMonikerImpl_Next(IEnumMoniker* iface, ULONG celt, 
IMoniker** rgelt, ULONG * pceltFetched)
+{
+//    DWORD i;
+//    ULONG ref;

We avoid C++ comments in Wine code to keep compatability with older compilers.


+    EnumMonikerImpl *This = (EnumMonikerImpl *)iface;
+    TRACE("(%p) currentPos %d Tablastindx %d\n",This, (int)This->currentPos, 
(int)This->TabLastIndx);
+    ULONG i;

You declared "i" above, but commented it out. Try avoid putting dead code in comments. If code isn't compiled, it will become stale and confuse people.


+ rc = CoGetMalloc(1, (LPMALLOC *) &ppMalloc);
if (!(IsValidInterface((LPUNKNOWN) pbc)))
return E_INVALIDARG;
+ usernamelen = (int) lstrlenW(szUserName); // overall string len
+
+ if (szUserName[char_cnt] == (WCHAR) '@') { // This is a progid not a file name

That's alot of casts. I don't think you really need that many, do you?

+    /* retrieve the requested number of moniker from the current position */
+    for(i=0;((This->currentPos < This->TabLastIndx) && (i < celt));i++)
+       rgelt[i]=(IMoniker*)This->TabMoniker[This->currentPos++].pmkObj;

Better to avoid tabs... and too many brackets. A space or two extra in the for( i=0; (This->... might make things look better.


+           if (szUserName[char_cnt] == '/' ||
+               szUserName[char_cnt] == '?' ||
+               szUserName[char_cnt] == '<' ||
+               szUserName[char_cnt] == '>' ||
+               szUserName[char_cnt] == '*' ||
+               szUserName[char_cnt] == '|' ||
+               szUserName[char_cnt] == ':')

Maybe that can be shortened to : if (strchr("/?<>*|:",szUserName[char_cnt]))

+ todo_wine { ok(hr==0x800401e4, "MkParseDisplayName - Progid not implemented hr=%08x\n", (int) hr); }

0x800401e4 is defined as MK_E_SYNTAX. It would be clearer to use the define rather than a number.


%08lx is probably what you want instead of casting hr to (int) to get rid of the printf parameter type warning.

+
+    IBindCtx_Release(pbc);
+
+    /* A bad drive */
+    static const WCHAR wszDisplayName2[] = {'1',':','s','i','d',':',
         
'2','0','D','0','4','F','E','0','-','3','A','E','A','-','1','0','6','9','-','A','2','D','8','-','0','8','0','0','2','B','3','0','3','0','9','D',':',0};

Again, for compatability, we avoid inline declarations, even though gcc can deal with them fine.


Mike



Reply via email to