delphi在window10下用uniGUI开发isapi的调试方法

 

好久没有用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网站找到这个链接:http://paul.klink.id.au/Software/Delphi/DebuggingIsapiWithIisExpress/

具体说一下步骤:

(1)把C:\Program Files\IIS Express\AppServer下的applicationhost.config文件复制到我的项目dll下,如:D:\wxh\AcroMultiLang\Sample\uniGUI\Win64\Debug

(2)修改applicationhost.config文件:

  • 在<system.applicationHost>之<applicationPools>节点下新增一个节点:
<add name="IsapiDebugAppPool" 
autoStart="true" 
enable32BitAppOnWin64="true" 
managedRuntimeVersion="" 
managedPipelineMode="Integrated" />
  • 在<sites>之<site>节点下新增一个节点:
<application path="/D64" applicationPool="IsapiDebugAppPool">
    <virtualDirectory path="/" 
     physicalPath="D:\wxh\AcroMultiLang\Sample\uniGUI\Win64\Debug" />
</application>
  • 修改<handlers>节点为<handlers accessPolicy="Read, Execute, Script">

设置delphi项目的run - parameters...,host application填:C:\Program Files\IIS Express\iisexpress.exe,parameters填:/config:D:\wxh\AcroMultiLang\Sample\uniGUI\Win64\Debug\applicationhost.config

ok,在Delphi下就可以调试了。

调试结果,发现是acroMultiResource.pas中有个地方计算pointer地址时,用的Integer强制转换,改为UInt64就好了。

另外,为了适应后端的每个session的语言不同,在acroMultiLib.pas中增加函数:procedure MultiHook(AProc:TGetDDAndLCIDProc);用于根据session语言动态的给不同的LCID,如:

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;

### 使用 AutoGPTQ 库量化 Transformer 模型 为了使用 `AutoGPTQ` 对 Transformer 模型进行量化,可以遵循如下方法: 安装所需的依赖包是必要的操作。通过 pip 安装 `auto-gptq` 可以获取最新版本的库。 ```bash pip install auto-gptq ``` 加载预训练模型并应用 GPTQ (General-Purpose Tensor Quantization) 技术来减少模型大小和加速推理过程是一个常见的流程。下面展示了如何利用 `AutoGPTQForCausalLM` 类来进行这一工作[^1]。 ```python from transformers import AutoModelForCausalLM, AutoTokenizer from auto_gptq import AutoGPTQForCausalLM model_name_or_path = "facebook/opt-350m" quantized_model_dir = "./quantized_model" tokenizer = AutoTokenizer.from_pretrained(model_name_or_path) model = AutoModelForCausalLM.from_pretrained(model_name_or_path) # 加载已经量化的模型或者创建一个新的量化器对象用于量化未压缩过的模型 gptq_model = AutoGPTQForCausalLM.from_pretrained(quantized_model_dir, model=model, tokenizer=tokenizer) ``` 对于那些希望进一步优化其部署环境中的模型性能的人来说,`AutoGPTQ` 提供了多种配置选项来自定义量化参数,比如位宽(bit-width),这有助于平衡精度损失与运行效率之间的关系。 #### 注意事项 当处理特定硬件平台上的部署时,建议查阅官方文档以获得最佳实践指导和支持信息。此外,在实际应用场景之前应该充分测试经过量化的模型以确保满足预期的质量标准。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火星牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值