桌面Delphi应用程序是否可以通过Windows 8认证(使用Windows App
显然,Delphi(任何版本)
does not support safe exception handlers(/ SAFESEH在Visual Studio中切换)。当在Windows 8上使用Windows Desktop应用程序认证工具包时,会导致警告。针对Windows 8桌面应用程序,每
certification requirements:
显然Delphi缺少这个开关,所以它不能做。我的问题是: >我的理解是正确的,即使Kit只显示一个警告(不是失败),因为这是一个“必须”的要求,今天任何Delphi应用程序不能被认证为Windows 8,因此不能包括在Windows应用程序商店? 要清除,我的应用程序是Windows 32位桌面应用程序(64位兼容),而不是Metro应用程序。 解决方法
我不能回答问题1.但是,我很难想象,使用这个词必然意味着该规则是可选的。
至于问题2,你需要从编译器/链接器的支持。你不能合理地期望使用PE编辑后链接工具。考虑下面的代码: try Beep; except on E: Exception do Writeln(E.ClassName,': ',E.Message); end; 编译器发出以下命令: Project1.dpr.11: try 0041C3AA 33C0 xor eax,eax 0041C3AC 55 push ebp 0041C3AD 68C9C34100 push $0041c3c9 // exception handler is at $0041c3c9 0041C3B2 64FF30 push dword ptr fs:[eax] 0041C3B5 648920 mov fs:[eax],esp Project1.dpr.12: Beep; 0041C3B8 6A00 push $00 0041C3BA E8E1CEFEFF call MessageBeep 0041C3BF 33C0 xor eax,eax 0041C3C1 5A pop edx 0041C3C2 59 pop ecx 0041C3C3 59 pop ecx 0041C3C4 648910 mov fs:[eax],edx 0041C3C7 EB59 jmp $0041c422 0041C3C9 E97291FEFF jmp @HandleOnException 0041C3CE 0100 add [eax],eax 0041C3D0 0000 add [eax],al 0041C3D2 E42F in al,$2f 0041C3D4 41 inc ecx 0041C3D5 00DA add dl,bl 0041C3D7 C3 ret 0041C3D8 41 inc ecx 0041C3D9 00A3D83E4200 add [ebx+$00423ed8],ah Project1.dpr.15: Writeln(E.ClassName,E.Message); ........ 现在,真正的异常处理程序是HandleOnException,在System.pas中实现。但是,推送到堆栈的地址是$ 0041c3c9,这是包含try / except块的代码的本地地址。这意味着为了创建一个SafeSEH PE部分,你需要找到每一个try / except你的代码。虽然这显然是可行的,但我不认为这是易处理。 我想象,x86编译器的SEH异常处理程序将只是在System.pas中声明的_HandleXXX函数。在这种情况下,添加一个PE部分只列出这些功能作为后链接步骤将是很容易的。但是,由于每个try / except都有自己的本地异常处理程序,我现在相信只有编译器作者可以实际地希望添加SafeSEH PE部分。 就我所看到的,没有QC报告要求对x86 Windows编译器的SafeSEH支持。我建议您记录QC报告和官方支持案例。 更新:完成对@haimg成功在哪里我失败,并且管理定位QC报告:QC#106781。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |