Delphi THTML文件GDIPL2A.pas出现问题

Delphi THTML文件GDIPL2A.pas出现问题,delphi,Delphi,正在运行一个项目,但遇到一个错误,错误是 “实际参数不足” 错误出现在“C:\Program Files\PBear\HTMLComponents\package\GDIPL2A.pas”中。 错误三次指向“继承的创建”;第260270行和第278行。在文件“GDIPL2A.pas”中。代码为:- var err: integer; begin inherited Create; err := GdipCreateBitmapFromScan0(W, H, 0, PixelFormat32b

正在运行一个项目,但遇到一个错误,错误是
“实际参数不足” 错误出现在“C:\Program Files\PBear\HTMLComponents\package\GDIPL2A.pas”中。 错误三次指向“继承的创建”;第260270行和第278行。在文件“GDIPL2A.pas”中。代码为:-

var
  err: integer;
begin
inherited Create;
err := GdipCreateBitmapFromScan0(W, H, 0, PixelFormat32bppARGB, nil, fHandle);
if err <> 0 then
  raise EGDIPlus.Create('Can''t create bitmap');
end;
var
err:整数;
开始
继承创造;
err:=GdipCreateBitmapFromScan0(W,H,0,像素格式32bppargb,nil,fHandle);
如果错误为0,则
升起EGDIPlus.Create('无法创建位图');
结束;
我想知道为什么它会在“THTML”文件中显示一个错误,这些文件都是安装THTML的文件。我甚至没有碰THTML文件

好心帮忙

谢谢和问候

Vas

在“继承的创建”上出现“实际参数不足”错误;表示您试图调用继承的构造函数,但它不提供任何参数。检查要从中继承的类,您将看到需要一些参数的Create。(如果基类没有,请检查它的父类,以及它的父类,依此类推。最终您会找到一个。)一旦找到了需要传递给它的构造函数声明,这一点应该非常明显

您的通话需要如下所示:

inherited Create(param1, param2);

我有THTML,它确实包括GDIPL2A.pas,它是GDIPlus的包装器;显然,THTML使用GDIPlus来显示嵌入的图像或其他东西

快速查看TGPImage和TGpBitmap的声明,可以看到它们各自的构造函数声明:


// TGpImage
public
  constructor Create(FileName: string; TmpFile: boolean = False); overload;
  constructor Create(IStr: IStream); overload;

// TGpBitmap
public
  constructor Create(W, H: Integer); overload;
  constructor Create(IStr: IStream); overload;
您将看到所有构造函数都至少接受一个或两个参数;您对继承的Create的调用没有通过。然而,由于对inherited的调用在另一个构造函数中,它应该可以工作(在我的机器上确实可以工作;我刚刚尝试从THTML中重建了一个演示,它重新编译了GDIPL2A.pas,很好),您还需要做一些其他事情,就像编译器正在使用的路径中的GDIPL2A的不同版本,而不是您在IDE编辑器中看到的版本

关于你的问题,我在上面第一段回答了。它在THTML中报告错误,因为编译器使用的是GDIPL2A的副本,而您的代码可能不希望它使用该副本

您可以通过以下任一方式解决此问题:

  • 在代码的uses子句中重新排序单元,以便所有导致GDIPL2A编译的调用都使用相同的调用

  • 将代码认为正在使用的GDIPL2A复制到项目的源文件夹中,以便从那里编译。如果您在同一个项目中使用它,这可能会破坏THTML,所以请做好准备

  • 查找并解析GDIPL2A的竞争副本,以便编译器的搜索路径上只有一个副本可用

  • 如果没有在问题项目中使用THTML路径,请从项目的搜索路径和库路径中删除该路径。如果愿意,您还可以使用项目|选项|包,防止在打开项目时加载THTML,以加快项目加载速度


  • 我不知道是否有人读过这篇文章,但我的问题发生在安装ThtmlViewer的过程中。我的解决方案是编辑GDIPL2A.pas文件。我刚刚添加了一个emty字符串和一个假布尔值,因此3个create语句如下所示:

       inherited Create('', False);
    
    然后一切都很顺利(至少到目前为止)

    (我有一台旧电脑上的旧Windows Xp上的旧Delphi 4,未连接到internet)

    亲切的


    二陵

    您使用的是哪个版本的Delphi?具有继承的Create继承的类是从哪个类继承的?(在接口部分的某处查找TSomeClass=class(…)。从我在这里读到的内容来看,这听起来像是版本冲突,单元基于不需要参数的基类的另一个版本!我使用的是Delphi版本4,在THTML文件中提到了{version 9.41}。我在THTML和我的项目文件夹中都没有找到TSomeClass=class()。谢谢你的回复-Vasdelphi4是11年前发布的!我想知道Delphi 2009是否会在2020年继续使用。Delphi 7是7年前发布的,现在仍然很流行。对我来说,这是最后一个“轻量级”的DelphiIDE,后来我尝试了2005年(大量bug)和2009年,这两个版本都很重。如果有个人版的话,我会转到D2009…1)使用GDIPL2A的(THTML)文件是MetaFilePrinter.pas、htmlview.pas、HTMLUn2.pas、HTMLSubs.pas。如何“导致GDIPL2A编译的调用使用的是同一个”?因为它只是将名称“GDIPL2A”放在“call”中。2) Sved GDIPL2A.pas在项目文件夹中并编译了它。仍然得到相同的错误。3) 我在C驱动器中还有2个THTML文件夹。所以我删除了它们,以免影响映射/代码。仍然是相同的错误。4) 我选中了“Project | Options | Packages”…“THTML”根本没有添加到它。我应该在Delphi4 IDE/Tools/Environmental/Library中添加itHello Ken吗以下是按降序排列的映射:-1 C:\Program Files\PBear\HTML Components\THTML\Package 2$(DELPHI)\Lib 3$(DELPHI)\Bin 4$(DELPHI)\Imports我想知道“Lib、bin、imports“是需要的。如果不需要,可以移除吗?如果不需要,可以移除,但不应该是问题所在。有些东西发现了不止一个GDIPL2A副本,而这些副本并不相同。请参阅上面的步骤3-使用Windows资源管理器并搜索GDIPL2A.*。除去THTML文件夹中的文件以外的所有匹配文件(将它们重命名为完全不同的文件,例如,像different_GDIPL2A.pas)。然后试着编译你的项目。vas,你要么没有彻底检查,要么你真的搞砸了。我不知道还能告诉你什么;在少数(非常罕见)的情况下,我遇到了相同的问题,或者知道其他人遇到了相同的问题,上述步骤总是能够发现并修复问题。嗨!梅森,我会怎么做