Текущий архив: 2004.03.09;
Скачать: CL | DM;
Вниз
Array Of Variant - Read of address 00000000 Найти похожие ветки
← →
YuRock (2004-02-26 14:04) [0]Здравствуйте, уважаемые мастера! Уже третий день пытаюсь найти ошибку, и не получается.
Вызывается функция:
function ibGetSQLRes(db: TIBDatabase; tr: TIBTransaction; SQLStr: string): Variant;
var
Query: TIBQuery;
begin
Query := TIBQuery.Create(nil);
try
Query.Database := db;
Query.Transaction := tr;
Query.SQL.Text := SQLStr;
Query.Open;
Result := Query.Fields[0].Value;
finally
Query.Free;
end;
end;
При ее трассировке (по F8) все проходит нормально. На последнем end"е (при выходе из ф-ции) нажимаю F7 - попадаю в следующую ф-цию (из модуля Variants):
procedure _VarToDynArray(var DynArray: Pointer; const V: TVarData; TypeInfo: Pointer);
asm
CALL DynArrayFromVariant
OR EAX, EAX
JNZ @@1
JMP VarCastError
@@1:
end;
И сразу по F7, соответственно, в DynArrayFromVariant:
procedure DynArrayFromVariant(var DynArray: Pointer; const V: Variant; TypeInfo: Pointer);
var
DADimCount, VDimCount: Integer;
DAVarType, I: Integer;
lengthVec: System.PLongInt;
Bounds, Indices: TBoundArray;
Value: Variant;
PDAData: Pointer;
begin
{ Get Variant information }
VDimCount:= VarArrayDimCount(V);
{ Allocate vector for lengths }
GetMem(lengthVec, VDimCount * sizeof(Integer));
{ Initialize lengths - NOTE: VarArrayxxxxBound are 1-based.}
for I := 0 to VDimCount-1 do
PIntegerArray(lengthVec)[I]:= (VarArrayHighBound(V, I+1) - VarArrayLowBound(V, I+1)) + 1;
{ Set Length of DynArray }
DynArraySetLength(DynArray, PDynArrayTypeInfo(TypeInfo), VDimCount, lengthVec);
...
end;
Так вот, валится при вызове "DynArraySetLength" - и не удевительно, ведь DynArray = nil!!!
Пожалуйста, объясните, что вообще происходит?! Зачем, почему и откуда эти ф-ции вообще вызываются? У меня эта проблема уже всю душу выела. Пожалуйста, попробуйте помочь. Спасибо.
← →
Silver Alex (2004-02-26 14:14) [1]а чему присваиваешь результат этой функции? кода побольше покажи
← →
YuRock (2004-02-26 14:20) [2]Спасибо большое! Я присваивал ее переменной типа TArrayOfVariant = Array Of Variant, а ф-ция возвращала Variant! Я 3 дня не мог этого заметить!
Спасибо большое!
Страницы: 1 вся ветка
Текущий архив: 2004.03.09;
Скачать: CL | DM;
Память: 0.44 MB
Время: 0.009 c