Hi all,
I'm working on atl80/atl100 recently, particularly on AtlAxCreateControl{,Lic}{,Ex}, AtlAxAttachControl, AtlIPersistStreamInit_{Load,Save}, AtlIPersistPropertyBag_{Load,Save}
The motivation to work on AtlAxCreateControl* and AtlAxAttachControl* is for AliWangwang [1]; the motivation to work on AtlIPersistPropertyBag_Load is for QQ[2].
I've already have solution for those apps, however, I have some trouble on them: 1. I have more and more test case for ATL, and found more and more difference behaviors between native AtlAxCreateControl/AtlAxAttachControl and buitin's, some of native behavior looks unreasonable to me so I doubt if we want to follow that. It would be nice to test more real world application before deciding what to do next. 2. I found the (seems) undocumented ATL_PROPMAP_ENTRY struct is different between atl80 and atl100 from my black box testing result. I know QQ use atl80.AtlIPersistPropertyBag_Load which receive a ATL_PROPMAP_ENTRY input parameter, but I don't have any real world app to test the atl100 version or any other version. I'm interesting to know more apps depends on any version (atl/atl80/atl90/atl100/atl110) of AtlIPersistStreamInit_*/AtlIPersistPropertyBag_* to see how they work.
I really appreciate a lot if anyone can help report ATL related bugs and CC me, maybe someone remembers some Apps have bugs on atl* but haven't report to bugzilla yet - I don't know any good way to find real world test case, that's why I'm here :) I'd really be happy to get some surprise smart way to do it!
In short, any ATL related bugs are welcome, particularly on AtlAxCreateControl*/AtlAxAttachControl/AtlIPersistPropertyBag*/AtlIPersistStreamInit* if you know that's the culprit, but never mind for other ATL related bugs.
Note: if an app bugs can be workaround by winetricks -q vcrun2005 / winetricks -q vcrun2008 / winetricks -q 2010, even with msvc*.dll override set to builtin, only leave native atl*.dll, then it is possible a ATL bug. Here are a few known ATL bugs: http://bugs.winehq.org/buglist.cgi?cmdtype=runnamed&list_id=147507&n...
Thank you a lot for any help!
[1] http://bugs.winehq.org/show_bug.cgi?id=33724 [2] http://bugs.winehq.org/show_bug.cgi?id=33822
I was doing some work earlier with Piotr (which has now stalled for some reason) on implementing MFC. We settled on an approach where I would use the MS headers to describe to him the ABI without implementation details (by writing headers and test cases mostly), and he would implement the actual library.
The ATL headers are related, so I should be able to at least get you the correct struct layouts for all versions.
I may also be able to build test programs in MSVC, if that would help.
ATL_PROPMAP_ENTRY is the same from atl71 through atl90. In atl100 and atl110 it looks like this:
struct ATL_PROPMAP_ENTRY { LPCOLESTR szDesc; const CLSID* pclsidPropPage; const IID* piidDispatch; void *rgclsidAllowed; DWORD cclsidAllowed; DISPID dispid; DWORD dwOffsetData; DWORD dwSizeData; VARTYPE vt; };
While the structure itself is undocumented, there are documented macros that create it:
http://msdn.microsoft.com/en-us/library/ee845406.aspx http://msdn.microsoft.com/en-us/library/ee845404.aspx
For the callback macros, the callback function is stored in rgclsidAllowed, and cclsidAllowed is 0. The only public mention of the callback signature I could find is in this article: http://msdn.microsoft.com/en-gb/vstudio/ee309358.aspx
On Sat, May 3, 2014 at 3:24 AM, Vincent Povirk madewokherd@gmail.com wrote:
ATL_PROPMAP_ENTRY is the same from atl71 through atl90. In atl100 and atl110 it looks like this:
Thanks Vincent, that helps a lot!
Could you confirm that the structure ATL_PROPMAP_ENTRY and the prototype of AtlIPersistStreamInit_Load/AtlIPersistStreamInit_Save/AtlIPersistPropertyBag_Load/AtlIPersistPropertyBag_Save are all in atlcom.h? Are they in any IDL files? I'll send a patch to add these structure and prototype if they are in header files or IDL files.
Thanks for the links as well!
Could you confirm that the structure ATL_PROPMAP_ENTRY and the prototype of AtlIPersistStreamInit_Load/AtlIPersistStreamInit_Save/AtlIPersistPropertyBag_Load/AtlIPersistPropertyBag_Save are all in atlcom.h? Are they in any IDL files? I'll send a patch to add these structure and prototype if they are in header files or IDL files.
Yep, those are all in atlcom.h. They're not in idl files.