Главная страница
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.015 c
6-1198579437
Свой
2007-12-25 13:43
2009.03.01
Webserver application и доступ к файлам под IIS 5.1


2-1232350095
И. Павел
2009-01-19 10:28
2009.03.01
Как правильно закрыть фрейм?


2-1232027730
timekiller
2009-01-15 16:55
2009.03.01
Расчет площади текста


15-1230572825
Alkid
2008-12-29 20:47
2009.03.01
Перфекционизм vs. тяп-ляп.


15-1230419786
Rubin
2008-12-28 02:16
2009.03.01
Подскажите где найти пример "управления рабочим столом"