http://qc.embarcadero.com/wc/qcmain.aspx?d=116040
Access Violation при запуске:
unit evFormats;
interface
type
Tl3ClipboardFormat = Cardinal;
Tl3ClipboardFormats = array of Tl3ClipboardFormat;
var
evPlainTextFormats : Tl3ClipboardFormats = nil;
evAllFormats : Tl3ClipboardFormats = nil;
implementation
uses
Windows
;
function l3FormatArray(const anArray: array of Tl3ClipboardFormat): Tl3ClipboardFormats;
{-}
var
l_Len : Integer;
l_Index : Integer;
begin
l_Len := Length(anArray);
SetLength(Result, l_Len); // - вот тут ПАДАЕТ, да и отладчик показывает, что Result - Invalid
(* for l_Index := 0 to Pred(l_Len) do
Result[l_Index] := anArray[l_Index];*)
end;
var
cf_EverestBin : Tl3ClipboardFormat = 1;
cf_EverestTxt : Tl3ClipboardFormat = 1;
cf_RTF : Tl3ClipboardFormat = 1;
cf_RTFLite : Tl3ClipboardFormat = 1;
initialization
evPlainTextFormats := l3FormatArray([cf_UnicodeText, cf_Text, cf_OEMText]);
evAllFormats := l3FormatArray([cf_EverestBin, cf_EverestTxt,
cf_RTF, cf_RTFLite,
cf_Bitmap,
cf_UnicodeText, cf_Text, cf_OEMText,
cf_hDrop]);
finalization
evPlainTextFormats := nil;
evAllFormats := nil;
end.
program tstXE4;
uses
evFormats;
begin
end.
-------------------------------------
Достаточно даже вот так:
unit evFormats;
interface
type
Tl3ClipboardFormat = Cardinal;
Tl3ClipboardFormats = array of Tl3ClipboardFormat;
var
evAllFormats : Tl3ClipboardFormats = nil;
implementation
uses
Windows
;
function l3FormatArray(const anArray: array of Tl3ClipboardFormat): Tl3ClipboardFormats;
{-}
var
l_Len : Integer;
l_Index : Integer;
begin
l_Len := Length(anArray);
SetLength(Result, l_Len);
for l_Index := 0 to Pred(l_Len) do
Result[l_Index] := anArray[l_Index];
end;
var
cf_EverestBin : Tl3ClipboardFormat = 1;
cf_EverestTxt : Tl3ClipboardFormat = 1;
initialization
evAllFormats := l3FormatArray([cf_EverestBin, cf_EverestTxt,
cf_UnicodeText, cf_Text, cf_OEMText,
cf_hDrop]);
finalization
evAllFormats := nil;
end.
Access Violation при запуске:
unit evFormats;
interface
type
Tl3ClipboardFormat = Cardinal;
Tl3ClipboardFormats = array of Tl3ClipboardFormat;
var
evPlainTextFormats : Tl3ClipboardFormats = nil;
evAllFormats : Tl3ClipboardFormats = nil;
implementation
uses
Windows
;
function l3FormatArray(const anArray: array of Tl3ClipboardFormat): Tl3ClipboardFormats;
{-}
var
l_Len : Integer;
l_Index : Integer;
begin
l_Len := Length(anArray);
SetLength(Result, l_Len); // - вот тут ПАДАЕТ, да и отладчик показывает, что Result - Invalid
(* for l_Index := 0 to Pred(l_Len) do
Result[l_Index] := anArray[l_Index];*)
end;
var
cf_EverestBin : Tl3ClipboardFormat = 1;
cf_EverestTxt : Tl3ClipboardFormat = 1;
cf_RTF : Tl3ClipboardFormat = 1;
cf_RTFLite : Tl3ClipboardFormat = 1;
initialization
evPlainTextFormats := l3FormatArray([cf_UnicodeText, cf_Text, cf_OEMText]);
evAllFormats := l3FormatArray([cf_EverestBin, cf_EverestTxt,
cf_RTF, cf_RTFLite,
cf_Bitmap,
cf_UnicodeText, cf_Text, cf_OEMText,
cf_hDrop]);
finalization
evPlainTextFormats := nil;
evAllFormats := nil;
end.
program tstXE4;
uses
evFormats;
begin
end.
-------------------------------------
Достаточно даже вот так:
unit evFormats;
interface
type
Tl3ClipboardFormat = Cardinal;
Tl3ClipboardFormats = array of Tl3ClipboardFormat;
var
evAllFormats : Tl3ClipboardFormats = nil;
implementation
uses
Windows
;
function l3FormatArray(const anArray: array of Tl3ClipboardFormat): Tl3ClipboardFormats;
{-}
var
l_Len : Integer;
l_Index : Integer;
begin
l_Len := Length(anArray);
SetLength(Result, l_Len);
for l_Index := 0 to Pred(l_Len) do
Result[l_Index] := anArray[l_Index];
end;
var
cf_EverestBin : Tl3ClipboardFormat = 1;
cf_EverestTxt : Tl3ClipboardFormat = 1;
initialization
evAllFormats := l3FormatArray([cf_EverestBin, cf_EverestTxt,
cf_UnicodeText, cf_Text, cf_OEMText,
cf_hDrop]);
finalization
evAllFormats := nil;
end.
------------------------------------
!!!!
!!!!
cf_EverestBin, cf_EverestTxt
заменяем на 1, 1
и - ВСЁ хорошо
по памяти ездят, когда "открытый массив" конструируют
Портят Result в l3FormatArray
---------
Даже вот так не падает:
evAllFormats := l3FormatArray([cf_EverestBin, cf_EverestTxt,
cf_UnicodeText, cf_Text, cf_OEMText]);
P.S. мне кажется, что если были бы тесты - они бы это показали бы. Не такая уж редкая ситуация. Дарю Embarcadero - "первый тест". И в свою базу тестов это внесу.
P.P.S. Пока Embarcadero не поправит ошибку - буду окучивать XE3. Так что про XE4 видимо пока ничего не расскажу.
---------
Даже вот так не падает:
evAllFormats := l3FormatArray([cf_EverestBin, cf_EverestTxt,
cf_UnicodeText, cf_Text, cf_OEMText]);
P.S. мне кажется, что если были бы тесты - они бы это показали бы. Не такая уж редкая ситуация. Дарю Embarcadero - "первый тест". И в свою базу тестов это внесу.
P.P.S. Пока Embarcadero не поправит ошибку - буду окучивать XE3. Так что про XE4 видимо пока ничего не расскажу.
Комментариев нет:
Отправить комментарий