http://bugs.winehq.org/show_bug.cgi?id=16051
--- Comment #5 from Anastasius Focht focht@gmx.net 2008-11-20 16:12:57 --- Hello,
--- quote --- Actually that one is probably not needed. When a stub exception is continued, execution will proceed into the next stub defined for that dll and cause another exception, it doesn't mean that the app called that function. --- quote ---
Maybe you misread ... it's not the infamous "unimplemented function" exception. The stub returns gdiplus specific "not implemented" code which gets thrown as CLR exception by .NET runtime callable wrapper.
--- snip dlls/gdiplus/font.c --- GpStatus WINGDIPAPI GdipNewPrivateFontCollection(GpFontCollection** fontCollection) { FIXME("stub %p\n", fontCollection);
if (!fontCollection) return InvalidParameter;
return NotImplemented; } --- snip dlls/gdiplus/font.c ---
--- snip --- 0033:Call KERNEL32.LoadLibraryExW(0032da7c L"c:\windows\assembly\gac\system.drawing\1.0.5000.0__b03f5f7f11d50a3a\gdiplus.dll",00000000,00000008) ret=791b7b63 0033:Call PE DLL (proc=0x60c37a2c,module=0x60c10000 L"gdiplus.dll",reason=PROCESS_ATTACH,res=(nil)) ... 0033:Call gdiplus.GdiplusStartup(7b59017c,00166ac8,0032df04) ret=003ea442 0033:trace:gdiplus:GdiplusStartup 0x7b59017c 0x166ac8 0x32df04 0033:trace:gdiplus:GdiplusStartup GdiplusStartupInput 1 (nil) 1 0 0033:Ret gdiplus.GdiplusStartup() retval=00000000 ret=003ea442 ... 0033:Call KERNEL32.GetProcAddress(60c10000,7b592860 "GdipNewPrivateFontCollection") ret=791e0ce5 0033:Ret KERNEL32.GetProcAddress() retval=60c14aac ret=791e0ce5 ... 0033:Call gdiplus.GdipNewPrivateFontCollection(049b8458) ret=003ea902 0033:fixme:gdiplus:GdipNewPrivateFontCollection stub 0x49b8458 0033:Ret gdiplus.GdipNewPrivateFontCollection() retval=00000006 ret=003ea902 ... 0033:Call KERNEL32.RaiseException(e0434f4d,00000001,00000000,00000000) ret=7921020d ... --- snip ---
Later GdiplusNotificationHook proc is explicitly queried and called by .NET CLR, most likely to propagate/pass initialization/shutdown events.
--- snip --- 0033:Call KERNEL32.GetProcAddress(60c10000,7b59b351 "GdiplusNotificationHook") ret=791e0ce5 0033:Ret KERNEL32.GetProcAddress() retval=60c12b10 ret=791e0ce5 0033:Call ntdll.RtlTryEnterCriticalSection(001537a0) ret=791b3451 0033:Ret ntdll.RtlTryEnterCriticalSection() retval=00000001 ret=791b3451 0033:Call KERNEL32.RaiseException(80000100,00000001,00000002,0032e574) ret=60c37b61 0033:trace:seh:raise_exception code=80000100 flags=1 addr=0x7b8449b0 0033:trace:seh:raise_exception info[0]=60c37be0 0033:trace:seh:raise_exception info[1]=60c38ad8 wine: Call from 0x7b8449b0 to unimplemented function gdiplus.dll.GdiplusNotificationHook, aborting --- snip ---
MSDN: http://msdn.microsoft.com/en-us/library/ms534046.aspx
Small stubs for the gdiplus NotificationHook/NotificationUnhook procs should be sufficient.
--- snip --- 002f:Call KERNEL32.GetProcAddress(6a890000,7b59b351 "GdiplusNotificationHook") ret=791e0ce5 002f:Ret KERNEL32.GetProcAddress() retval=6a89d774 ret=791e0ce5 002f:Call ntdll.RtlTryEnterCriticalSection(0014b340) ret=791b3451 002f:Ret ntdll.RtlTryEnterCriticalSection() retval=00000001 ret=791b3451 002f:Call gdiplus.GdiplusNotificationHook(7b590180) ret=003ea902 002f:trace:gdiplus:NotificationHook 0x7b590180 002f:Ret gdiplus.GdiplusNotificationHook() retval=00000000 ret=003ea902 002f:Ret window proc 0x17851e (hwnd=0x3003e,msg="SystemEventsThreadCallbackMessage",wp=00000000,lp=00000000) retval=00000000 --- snip ---
Regarding the initial bug ... it seems all gdiplus functions dealing with font collections are just stubs that need to be worked on.
Regards