Naja, da es __FILE__ und __LINE__ nicht in Delphi gibt, gestaltet sich die Übersetzung äußerst unspektakulär:
Delphi-Quellcode:
{$IFDEF _DEBUG}
function CHECK_HR(p: HRESULT): HRESULT;
var
acError: array[0..255] of Char;
begin
if FAILED(p) then begin
ZeroMemory(@acError, sizeof(Char) * 256);
strlfmt(acError, sizeof(Char) * 256, 'DEBUG: HRESULT FAILED %i', [p]);
MessageBox(0, acError, 'HRESULT FAILED', MB_OK or MB_ICONERROR);
end;
Result := p;
end;
{$ELSE}
function CHECK_HR(p: HRESULT): HRESULT;
begin
Result := p;
end;
{$ENDIF}
Da es in Delphi keine Makros gibt, muss die Funktion aber anders aufgerufen werden. In C++ würde man einfach schreiben:
In Delphi stattdessen:
if FAILED(CHECK_HR(...)) then Exit;
Der Code ist übrigens nicht getestet, müsste aber funktionieren.