(Gast)
n/a Beiträge
|
Stack überlauf
6. Aug 2017, 22:53
Zitat:
exception class : EStackOverflow
exception message : Stack-Überlauf.
main thread ($1894):
05e40d12 +012 KVideoPlayer.dll sprintf 23 +0 CallWvsprintf
05e41fb8 +088 KVideoPlayer.dll CommonUtils 131 +5 ReportError
05e428be +17e KVideoPlayer.dll CommonUtils 394 +31 BuildDirect3d
Die Funktion die das verursacht.
Delphi-Quellcode:
hr := m_pD3DDirect3d.CreateDevice(D3DADAPTER_DEFAULT, // always the primary display adapter
D3DDEVTYPE_HAL,
0,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
@d3dpp,
m_pD3DDevice);
if (FAILED(hr)) then
ErrStr := ReportError('Cannot create a Direct3d device', hr) // <<<< von hier geht das aus.
else
result := TRUE;
Delphi-Quellcode:
function ReportError(pszError: pchar; hrCode: HRESULT): WideString;
var
szErr: array [0..MAX_ERROR_TEXT_LEN-1] of char;
res: DWORD;
begin
res := AMGetErrorText(hrCode, @szErr[0], MAX_ERROR_TEXT_LEN);
if (res <> 0) then
result := CallWvsprintf(' %s : COM Error 0x%x, %s', [pszError, hrCode, szErr])
else
result := CallWvsprintf(' %s : COM Error 0x%x', [pszError, hrCode]);
end;
die gesamte Unit.
Delphi-Quellcode:
// This unit is made using the code from following URL,
// http://proger.i-forge.net/Calling_printf_from_Delphi/7ES
unit sprintf;
interface
function CallWvsprintf(Format: WideString; const Args: array of const): WideString;
implementation
uses SysUtils, Windows;
type
TVAList = array[0..$FFFF] of Pointer;
function CallWvsprintf(Format: WideString; const Args: array of const): WideString;
var
VA: TVAList;
StrI, I, Size: Integer;
Strings: array[0..High(VA)] of WideString;
begin
StrI := 0;
Size := Length(Format) * 2;
for I := 0 to Length(Args) - 1 do
with Args[I] do
if I >= Length(VA) then
raise EConvertError.CreateFmt(' Too many format arguments (more than %d).', [Length(VA) - 1])
else
case VType of
vtInteger:
begin
VA[I] := Pointer(VInteger);
Inc(Size, 20);
end;
vtPChar,
vtAnsiString:
begin
// Delphi will automatically convert String or PChar
// into WideString and vice versa:
Strings[StrI] := VPChar + #0;
VA[I] := @Strings[StrI][1];
Inc(Size, Length(Strings[StrI]) * 2 - 2 {null-terminator});
Inc(StrI);
end;
vtPWideChar,
vtWideString:
begin
VA[I] := VPWideChar;
Inc(Size, Length(VPWideChar) * 2);
end;
else
raise EConvertError.CreateFmt(' Invalid format argument of VType = %d.', [VType]);
end;
SetLength(Result, Size + Size div 10); {10% extra space}
SetLength(Result, wvsprintfW(@Result[1], PWideChar(Format), @VA));
end;
end.
in CallWvsprintf direkt bei begin.
kann mir jemand einen Tip geben wie ich das beheben kann?
Wie man lesen kann ist die Unit nicht von mir und der Entwickler nicht mehr erreichbar.
gruss
Geändert von EWeiss ( 6. Aug 2017 um 23:12 Uhr)
|
|
Zitat
|