好久没有用delphi了,有个老同事还在持续使用新的Delphi,用到10.3版本了。他说我原来写的Acroprise Multi-Language Suite多语言元件,在用uniGUI元件开发web程序时,standalone下32bit和64bit都没有问题,在isapi下32bit没问题,但是64bit有报错,web界面出不来。 我准备了开发环境:windows 10,delphi 10.3,uniGUI 1.90。 standalone下,AcroMulti在32bit和64bit确实没问题。 又复习了一遍如何把isapi部署到IIS中,windows 10预装IIS是10.0版本。发现项目编译在32bit下AcroMulti能正常跑,但是在64bit下,确实画面出不来。 如何Debug呢,找来找去,有说用inetinfo.exe,有说用w3wp.exe,都没成功。后来还是在stackoverflow网站找到这个链接:https://paul.klink.id.au/Software/Delphi/DebuggingIsapiWithIisExpress/ 具体说一下步骤: (1)把C:Program FilesIIS ExpressAppServer下的applicationhost.config文件复制到我的项目dll下,如:D:wxhAcroMultiLangSampleuniGUIWin64Debug (2)修改applicationhost.config文件: 设置delphi项目的run – parameters…,host application填:C:Program FilesIIS Expressiisexpress.exe,parameters填:/config:D:wxhAcroMultiLangSampleuniGUIWin64Debugapplicationhost.config ok,在Delphi下就可以调试了。 调试结果,发现是acroMultiResource.pas中有个地方计算pointer地址时,用的Integer强制转换,改为UInt64就好了。 另外,为了适应后端的每个session的语言不同,在acroMultiLib.pas中增加函数:procedure MultiHook(AProc:TGetDDAndLCIDProc);用于根据session语言动态的给不同的LCID,如:
<add name="IsapiDebugAppPool" autoStart="true" enable32BitAppOnWin64="true" managedRuntimeVersion="" managedPipelineMode="Integrated" />
<application path="/D64" applicationPool="IsapiDebugAppPool"> <virtualDirectory path="/" physicalPath="D:wxhAcroMultiLangSampleuniGUIWin64Debug" /> </application>
procedure MultiDD_GetDDAndLCID(out ADDName:string;out ALCID:string); begin ADDName:=DM_DD.acroMultiStreamDD1.DDName; if (uniGUIApplication.UniSession<>nil) and (uniGUIApplication.UniSession.UniMainModule<>nil) then begin //返回当前Session的LCID ALCID:=TUniMainModule(uniGUIApplication.UniSession.UniMainModule).LCID; end else begin //没有Session,用服务器的LCID或者英文 ALCID:='1028'; end; end; procedure TDM_DD.DataModuleCreate(Sender: TObject); begin acroMultiLib.MultiHook(MultiDD_GetDDAndLCID); end;
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算