Delphi疑难问题整理!!!

Delphi学习天空 专栏收录该内容
24 篇文章 0 订阅

一.Dll调用时报错,例如:



  TGetResPrice = function(var AName: string; AFileName: string): TResourceRecArray; stdcall;

var

  LFunction: TGetResPrice;

调用:

      @LFunction := GetProcAddress(LDllHandle, ResPriceLoad_FuncName);
      if Assigned(LFunction) then

        LResc := LFunction(AName, AFileName);

dll实现:

function GetResPriceInfo(var AName: string; AFileName: string): TResourceRecArray; stdcall;

begin

。。。。。

end;

有可能是参数缺少或不一致,两者必须一致!


二.delphi dll释放报错 FreeLibrary报错

FreeLibrary(LDllHandle);


1.有可能是调用和DLL的两者调用FastMM不一致,一个引用了,另外一个没有引用;

uses
  FastMM4,
  ExceptionLog,
  SysUtils,
  Classes,
  TableTypes,
  CoDialogs,

  PriceLoad in '..\Source\PriceLoad.pas';

2.另外一个可能就是两者引用包不一样,Component--Install Packages---勾选Build with runtime packages;


3.另外参数如果是字符串,要主程序和dll都要引用sharemem,在项目文件开头处引用;


4.如果是调用了Com组件,需要
开始处:
  CoInitialize(nil);
结尾处:
  CoUninitialize;


三.TAppBuilder.CheckDog 提示注册类已经存在:DPR文件引用包的问题

例如:A class named TcxRect already exists

在EXE+DLL架构中,多个使用DEV控件的DLL中出现“A class named TcxRect already exists”错误。

把cxLibraryVCLD7.bpl拷到运行目录下,并且在工程的options中,把cxLibraryVCLD7.bpl加入到runtime packages中,可解决“A class named TcxRect already exists”错误。

类似的错误,一般都是缺少运行时包所致,仔细排查都能解决。

Qd8.exe 加载modArchRptData.dll,在QD8.exe---Component--Install Packages---Build with runtime packages --- 后面添加cxLibraryVCLD7;


四、[Error] Packages 'DTree70' and 'dxEditorsD7' both contain unit ***

项目引用包问题,重复引用了;找到菜单---components--Install Packeages 更改为正确的值:

VCL;RTL;DBRTL;VCLDB;Common;FIB70;TB2K70;TBX70;Berg70;DTree70;IoData;dac70



  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

vx_xtfnpgy

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值