windows 7 - ShowMessage in Delphi XE3 DllMain -
dll below compiled xe3.
library mydll; uses system.sysutils, system.classes, vcl.dialogs; {$r *.res} var ii: integer; function test: integer; begin result := ii; end; exports test; begin ii := 5; showmessage('dll prolog'); end. when call function test() delphi xe3 or delphi 2007 program correct result (5) in both cases. message "dll prolog" displayed delphi 2007 program, not delphi xe3 program. why?
edit
and when "run" dll xe3 ide delphi 2007 host showmessage() not work.
the key in function:
function messagedlgposhelp(const msg: string; dlgtype: tmsgdlgtype; buttons: tmsgdlgbuttons; helpctx: longint; x, y: integer; const helpfilename: string): integer; begin if tosversion.check(6) , uselatestcommondialogs , styleservices.enabled , styleservices.issystemstyle result := dotaskmessagedlgposhelp('', msg, dlgtype, buttons, helpctx, x, y, helpfilename) else result := domessagedlgposhelp(createmessagedialog(msg, dlgtype, buttons), helpctx, x, y, helpfilename); end; in cases, depending on whether or not host application has comctl32 v6 manifest, different branches of if statement chosen.
if dotaskmessagedlgposhelp branch chosen, ensuing call taskdialogindirect fails hresult code $80070057. win32 error code, error_invalid_parameter.
if domessagedlgposhelp branch chosen, dialog shows.
i'm not sure why taskdialogindirect failing when called library initialization block, i'm not entirely surprised. severely restricted in can done dllmain , should not attempting show dialogs there.
Comments
Post a Comment