Hi,
A lot of thanks to Nikolay and Jacek for many comments and suggestions :)
While working on tests, I found some differences between atl80 and atl100:
--- snip --- + ok(wndproc[0] == wndproc[1], "expected same proc!\n"); --- snip ---
- On atl80, wndprocs are different for class AtlAxWin80 and class AtlAxWinLic80, however, wndprocs are the same for class AtlAxWin100 and class AtlAxWinLic100.
--- snip --- + hwnd = CreateWindowW(cls_names[i], NULL, 0, 100, 100, 100, 100, NULL, N ULL, NULL, NULL); + ok(hwnd != NULL, "CreateWindow failed!\n"); + control = (IUnknown *)0xdeadbeef; + res = AtlAxGetControl(hwnd, &control); + todo_wine ok(res == E_FAIL, "AtlAxGetControl failed with res %08x\n", res); --- snip ---
- On atl80, CreateWindow with NULL window name or empty name, then call AtlAxGetControl, result is S_OK. On atl100, the same test show that result is E_FAIL. control is NULL in both situation.
We've already shared source between different atl version, so it would be annoying to change the code to match different edge case on different version of atl. As far as now, I can't find any real world app depends on any of the above different edge result, so I guess we'd better follow what atl100 does even in atl80 code, would we?
Thanks for any comments.
--- dlls/atl100/tests/atl.c | 159 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 147 insertions(+), 12 deletions(-)
Hello,
Please ignore this, there is one bug in the code. I've had more tests recent days, I'll update my new result later. Now I found even more incompatible between atl80 and atl100.. The ATL_PROPMAP_ENTRY struct is different between atl80 and atl100, but it is undocumented... What a crazy fun black box testing to figure out this! :)