I have an Ada package written to interface to a database API which is, in C/C++. In the main, I have managed attaching the newdb (db_handle) to an existing database with success! Then, I tried to pass the newdb (db_handle) as a variable arguments list in function d_start_transaction. An error was raised by the API stating that invalid database handle (no active transaction). Under this circumstance, only a null or invalid db_handle will raise this error. I have try to count the number of arguments passed using Stdarg.Impl.ArgCount (args). It returns 3 (in this case was newdb'Unchecked_Access & tpb_length & tpb_address). I can't figure out what is wrong with my code. It has perfect compilation and runs well. I am suspecting the newdb'Unchecked_Access was not passed correctly. Can someone help? In C/C++ the syntax of isc_start_transaction() is : ISC_STATUS isc_start_transaction( ISC_STATUS *status_vector, isc_tr_handle *trans_handle, short db_handle_count, ...); where ... is isc_db_handle *db_handle, unsigned short tpb_length, char *tpb_address, [isc_db_handle *db_handle, unsigned short tpb_length, char *tpb_address ...]); Of, prior to calling the d_start_transaction function, I have called the d_attach_database to obtain the newdb (db_handle) with success. The db_handle has been passed to other functions as well which return expected results. I/we can rule out that the db_handle, newdb, was not assigned properly. My question is, Is the pointer to db_handle of type PVOID (void *, in C/C++) passed correctly with my implementation: function "&" is new Stdarg.Concat (Pdb_handle); and Stdarg.Empty & newdb'Unchecked_Access & tpb_length & tpb_address in d_start_transaction? Please help! My code is as below: -------------------------------------------- with Ada.Unchecked_Conversion; with Stdarg; with Interfaces; with Interfaces.C; with System; package database is type Void is null record; subtype PVoid is System.Address; subtype Long is Interfaces.C.Long; type Long_Array is array (Natural range <>) of aliased Long; subtype Unsigned_long is Interfaces.C.Unsigned_Long; subtype D_LONG is Long; subtype D_UNSIGNED_LONG is Unsigned_Long; subtype D_STATUS is Long; type PD_STATUS is access all D_STATUS; type D_STATUS_Array is array (Natural range <>) of aliased D_STATUS; subtype db_handle is PVoid; subtype tr_handle is PVoid; type Pdb_handle is access all db_handle; ... function To_Char is new Ada.Unchecked_Conversion (Integer, Char); function "&" is new Stdarg.Concat (Pdb_handle); function "&" is new Stdarg.Concat (PChar); function "&" is new Stdarg.Concat (Unsigned_Short); function "&" is new Stdarg.Concat (Short); ... function d_start_transaction (status_vector : access D_STATUS; trans_handle : access tr_handle; db_handle_count : Short; args : Stdarg.Arglist := Stdarg.Empty) return D_STATUS; private ... pragma Import (Cdecl, d_start_transaction, "isc_start_transaction"); ... end database; ----------------------------------- with Ada.Text_IO; use Ada.Text_IO; with Ada.Integer_Text_IO; use Ada.Integer_Text_IO; with Interfaces.C; use Interfaces; with Stdarg; with Win32; with database; use database; procedure main is newdb : aliased db_handle; trans : aliased tr_handle; status : aliased D_STATUS_Array (0..19); sqlcode : D_LONG; temp : D_STATUS; tpb_length : Unsigned_Short := 0; tpb_address : PChar := NULL; begin ... temp := d_start_transaction (status status'First)'Unchecked_Access, trans'Unchecked_Access, 1, Stdarg.Empty & newdb'Unchecked_Access & tpb_length & tpb_address); ... end main; -------------------------------- -- BY Hoe byhoe.lexical@technologist.com VP, R&D (ES/IS Group) lexical@tm.net.my Lexical Integration (M) Sdn Bhd http://www.angelfire.com/biz/Lexical