From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,97ad19cb1e124537,start X-Google-Attributes: gid103376,public From: "Adrian BY, Hoe" Subject: Variable argument list Date: 1998/06/09 Message-ID: <357CBD1C.4195F97B@technologist.com> X-Deja-AN: 360946969 Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------5246995C9C924F8548D4BDC0" Organization: Lexical Integration (M) Sdn Bhd Newsgroups: comp.lang.ada Date: 1998-06-09T00:00:00+00:00 List-Id: This is a multi-part message in MIME format. --------------5246995C9C924F8548D4BDC0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit 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 --------------5246995C9C924F8548D4BDC0 Content-Type: text/x-vcard; charset=us-ascii; name="vcard.vcf" Content-Transfer-Encoding: 7bit Content-Description: Card for Adrian BY, Hoe Content-Disposition: attachment; filename="vcard.vcf" begin: vcard fn: Adrian BY, Hoe n: Hoe;Adrian BY, org: Lexical Integration (M) Sdn Bhd email;internet: byhoe.lexical@technologist.com title: VP, R&D (ES/IS Group) x-mozilla-cpt: ;0 x-mozilla-html: FALSE version: 2.1 end: vcard --------------5246995C9C924F8548D4BDC0--