Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.03.01;
Скачать: CL | DM;

Вниз

IB API   Найти похожие ветки 

 
Olegus   (2008-07-13 17:41) [0]

Добрый всем день. Есть функция
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)". Что я упустил?


 
Сергей М. ©   (2008-07-13 21:55) [1]

Скоре всего, -  соглашение о вызове.

А к чему все это БДСМ ?)


 
PEAKTOP ©   (2008-07-14 01:34) [2]

> Всё это в длл.

А так ?


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);


 
PEAKTOP ©   (2008-07-14 01:35) [3]

> TR_Handle := StartTransaction(teb);

это убрать.


 
Olegus   (2008-07-14 12:19) [4]

#PEAKTOP ©
большое спасибо, но теперь ошибку даёт - ReallocMem(Pointer(P), NewSize);



Страницы: 1 вся ветка

Текущий архив: 2009.03.01;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.014 c
3-1215617383
Morrison
2008-07-09 19:29
2009.03.01
Как восстановить индексы в Paradox?


2-1231928496
СержК
2009-01-14 13:21
2009.03.01
Не получается отобразить картинку в компонетте: Image


15-1230819583
Tinx
2009-01-01 17:19
2009.03.01
Восстановление забытого пароля для DBISAM


15-1230812008
Kerk
2009-01-01 15:13
2009.03.01
[FreeBSD] Странная проблема с консолью


15-1230995201
абдирофф
2009-01-03 18:06
2009.03.01
помогите разобратся с ошибками при компилировании программы