Delphi-E2033类型的实际和形式var参数必须相同

Delphi-E2033类型的实际和形式var参数必须相同,delphi,delphi-2010,Delphi,Delphi 2010,我是Delphi新手,正在尝试对一个多年前实现的项目进行调试。我的ide是Delphi2010,代码有错误 function DrawTextExW(hDC: HDC; lpString: PWideChar; nCount: Integer; var lpRect: TRect; uFormat: UINT; dtp: PDRAWTEXTPARAMS): Integer; const MAX_STATIC_BUFFER = 8192; const STATIC_BUFFER_LE

我是Delphi新手,正在尝试对一个多年前实现的项目进行调试。我的ide是Delphi2010,代码有错误

function DrawTextExW(hDC: HDC; lpString: PWideChar; nCount: Integer; var lpRect:
TRect; uFormat: UINT; dtp: PDRAWTEXTPARAMS): Integer;

const
   MAX_STATIC_BUFFER = 8192;
const
   STATIC_BUFFER_LEN: integer = 8192;
const
   DT_PREFIXONLY = $00200000;

var
...
  tm: TTextMetricA;
...

begin
  ...

  GetTextMetrics(hDC, tm);    //Error Line
  if (uFormat and DT_EXTERNALLEADING) = DT_EXTERNALLEADING then
    lh := tm.tmHeight + tm.tmExternalLeading
  else
    lh := tm.tmHeight;

  ...
end
在该行中获取“[DCC Error]ElVCLUtils.pas(3555):E2033类型的实际和形式var参数必须相同”错误。此代码有什么问题?

您应该使用

var
...
  tm: TTextMetric;
...

begin
  ...

  GetTextMetrics(hDC, tm);


首选第一个版本。

编译器会准确地告诉您代码的错误所在。确定var参数,然后检查实际参数和形式参数的类型。你会发现它们不匹配。你考虑过这个函数是否还需要存在吗
DrawTextExW
已由操作系统提供。也许你的项目源于你瞄准Ansi版本的Windows,比如Windows98。这些版本不受Microsoft或Embarcadero支持,因此您可能也不需要支持它们。然后你可以删除所有代码,而不是修复它。Rob,关于支持,你一定是对的,项目在基督面前:)我将在不同的平台上再次编写项目,以便尝试阅读和理解算法。塞格的回答足以快速解决问题。谢谢你的回答;)+1,您可以添加为什么第一个版本更可取though@Smasher-因为不需要使用函数/结构的ANSI版本
GetTextMetricsA
&
TTextMetricA
会降低代码的可读性和可支持性。是的,我知道这一点。我只是觉得如果你加上支持你陈述的论据,你的答案会更完整:)
var
...
  tm: TTextMetricA;
...

begin
  ...

  GetTextMetricsA(hDC, tm);