![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
IB API [D5, Firebird 2.0]
Olegus © (2008-07-13 17:41:00)Добрый всем день. Есть функция
function StartTransaction(const teb: array of isc_teb) : isc_tr_handle;
var
status : status_vector;
IBerrCode : isc_status;
begin
IBerrCode := isc_start_multiple(@status, @result, high(teb) + 1, @teb);
if IBerrCode <> 0 then HandleIBErrors(@status);
end;
в юните который экпортируется из длл имею
type
isc_tr_handle = pointer;
isc_teb = record
db_ptr: pisc_db_handle;
tpb_len: longint;
tpb_ptr: pchar;
end;
var teb : isc_teb;
TR_Handle : isc_tr_handle;
....
begin
.....
TR_Handle := nil;
teb.db_ptr := DB_Handle;
teb.tpb_len := 0;
teb.tpb_ptr := nil;
TR_Handle := StartTransaction(teb);
Всё это в длл. Из главной программы получаю DB_Handle (хэндл вроде нормальный).
При выполнении StartTransaction выдаёт "invalid transaction handle (expecting explicit transaction start)". Что я упустил?
Olegus (2008-07-14 12:19:00) [1]#PEAKTOP ©
большое спасибо, но теперь ошибку даёт -ReallocMem(Pointer(P), NewSize);
PEAKTOP (2008-07-14 01:35:00) [2]> TR_Handle := StartTransaction(teb);
это убрать.
PEAKTOP (2008-07-14 01:34:00) [3]> Всё это в длл.
А так ?
type
ULONG = LongInt;
TISC_TEB = record
db_handle : PISC_DB_HANDLE;
tpb_length : ULONG;
tpb_address : PChar;
end;
PISC_TEB = ^TISC_TEB;
procedure FBAlloc(var P; OldSize, NewSize: Integer);
var
i :Integer;
begin
if((not Assigned(Pointer(P))) or (Pointer(P) = nil))then
GetMem(Pointer(P), NewSize)
else
ReallocMem(Pointer(P), NewSize);
for i:=OldSize to NewSize-1 do
PChar(P)[i] := #0;
end;
.............
var PTEB : PISC_TEB;
TR_Handle : isc_tr_handle;
....
begin
.....
TR_Handle := nil;
FBAlloc(PTEB, 0, SizeOf(TISC_TEB));
PTEB^.db_ptr := DB_Handle;
PTEB^.tpb_len := 0;
PTEB^.tpb_ptr := nil;
TR_Handle := StartTransaction(teb);
if (isc_start_multiple(@status, TR_Handle, 1, PTEB) <> 0)then
begin
HandleIBErrors(@status)
end
.............
FreeMem(PTEB);
Сергей М. (2008-07-13 21:55:00) [4]Скоре всего, - соглашение о вызове.
А к чему все это БДСМ ?)