なので。どうでも。while/repeat ループの継続についての直感が間違っていました。自分を馬鹿にしました:-)
コメント行を参照してください。コメントを外すと、コンパイルはうまくいきます。コメントしたままにすると、未定義の結果について警告が表示されます。コンパイラは、Break and Continue のような疑似手続きを考慮していないようです。
Delphi の以前のバージョンで発生していますか? QCはありますか?
//returns 0 or win32 error code
function TfmMain.callQDN(DeviceName: string;
out buff: string): DWORD;
const len_step = 8192;
var res, len, err: DWORD;
lpDeviceName: PChar;
begin
SetLength(buff, len_step);
len := Length(buff);
lpDeviceName := nil;
if DeviceName>'' then lpDeviceName := @DeviceName[1];
repeat
Res := QueryDosDevice(lpDeviceName, @buff[1], len);
if Res = 0 then begin
err := GetLastError;
// Result := err;
if err = ERROR_INSUFFICIENT_BUFFER then begin
len := len_step + len;
SetLength(buff, len);
continue;
end;
Result := err;
end else begin
Result := 0;
SetLength(buff, res); // res+1 ?
end;
until (Result = 0);
end;