2012-11-07 1 views
2

몇 년 전에 구현 된 프로젝트에서 디버그를 시도하면서 Delphi에 처음 생겼습니다. 내 생각은 델파이 2010이고 오류가있는 코드입니다.Delphi - E2033 실제 및 공식 var 매개 변수 유형이 동일해야합니다.

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 오류] ElVCLUtils.pas (3555) : 실제와 공식 VAR 매개 변수의 E2033 유형이 동일해야합니다"그 라인에서 오류가 발생했습니다. 이 코드의 문제점은 무엇입니까?

+3

컴파일러는 코드의 문제점을 정확히 알려줍니다. var 매개 변수를 확인한 다음 문제의 실제 매개 변수와 형식 매개 변수의 유형을 확인하십시오. 일치하지 않는 것을 볼 수 있습니다. –

+1

이 기능이 더 이상 존재해야하는지 여부를 고려 했습니까? 'DrawTextExW'는 이미 OS에 의해 제공됩니다. 어쩌면 당신의 프로젝트는 Windows 98과 같이 Ansi Windows 버전을 타겟으로 삼은 시점에서 나온 것일 수도 있습니다. Microsoft 나 Embarcadero에서는 이러한 버전을 지원하지 않기 때문에 지원할 필요가 없을 수도 있습니다. 그런 다음이 코드를 고치지 않고 삭제할 수 있습니다. –

+0

Rob, 지원이 필요합니다. 프로젝트가 다음과 같습니다. :) 다른 플랫폼에서 프로젝트를 다시 작성하여 알고리즘을 읽고 이해하려고합니다. Serg의 대답은 빠른 수정으로 충분합니다. 귀하의 답변을 주셔서 감사합니다;) – ffffffff

답변

7

당신도

var 
... 
    tm: TTextMetric; 
... 

begin 
    ... 

    GetTextMetrics(hDC, tm); 

또는

var 
... 
    tm: TTextMetricA; 
... 

begin 
    ... 

    GetTextMetricsA(hDC, tm); 

첫 번째 버전이 바람직하다 사용해야합니다.

+1

+1, 왜 첫 번째 버전을 선호 할 수 추가 할 수 있습니다 – jpfollenius

+0

@ Smasher - 기능/구조체의 ANSI 버전을 사용할 필요가 없기 때문에. 'GetTextMetricsA' 및'TTextMetricA'는 코드를 읽기 쉽고 지원하기 쉽지 않게 만듭니다. – kludg

+0

예, 알고 있습니다. 난 그냥 당신의 진술을 지원하는 인수를 추가하면 귀하의 답변을 더 완벽하게 만들 것이라고 생각 :) – jpfollenius