comp.lang.ada
 help / color / mirror / Atom feed
From: "bubble" <bubble@bubble.d2g.com>
Subject: how to declare a accss type in ada as C's generic pointer
Date: Thu, 9 Dec 2004 14:29:58 +0800
Date: 2004-12-09T14:29:58+08:00	[thread overview]
Message-ID: <cp8s17$u2$1@netnews.hinet.net> (raw)


dear all:
I got a problem work with C's generic pointer(void *).
in general case,I declare access type with convention pragma as C's pointer
define.
It work fine.
my question is I don't know how to define a access type as C's generic
pointer.
now,I use System.address as C's generic point,is it correct?



for example.

in C,I got a C's .H file.

enum message_type{singer_name=6,music_size=7,playTime=11}
int querySongStatus(int message_type,char * message ,int
max_message_length,int * message_length,void * Num);

in Ada.I rewrite it and import it to ada. such as

package work is
 pragma Liner_Options("-lmymusic32");
 type message_type is (singer_name,music_size,play_time);
 subtype myString is string(1..300);
 type mystring_access is access all mystring;
 type integer_access is access all integer;
 function query_Song_Status(
               msg_type:message_type;
               message:mystring;
               max_message_length:integer;
               message_length:integer_access;
               Num:System.address);
 pragma Conversion(C,mystring);
 pragma COnversion(C,integer_access);
 pragma import(Stdcall,query_Song_Status,"querySongStatus");
private
 for message_Type use (
  singer_name=>6;
  music_size=>7;
  playTime=>11);
end work;

in C,if I want to query singer name then
 char * name = (char *)malloc (sizeof(char) * 300);
 int length=0;
 //I must pass a char pointer to querySongStatus..
 querySongStatus(singer_name,name,300,&length,null);
else if I want to query song's disk size then
 int diskByte=0;
 //I must pass a integer pointer to last parameter
 querySongStatus(music_size,null,0,null,&diskByte);
else if I want to query a song's play time then
 float totalTime;
 //I must pass float pointer to last parameter
 querySongStatus(playTime,null,0,0,&totalTime);

the last parameter is generic pointer,
the C's function will cast the generic pointer to another type pointer
according to what the first parameter is?

in Ada.
I don't know how to declare the access type correct?
can anybody tell me how to do?





thanks.





             reply	other threads:[~2004-12-09  6:29 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-12-09  6:29 bubble [this message]
2004-12-10  1:02 ` how to declare a accss type in ada as C's generic pointer Jeffrey Carter
2004-12-15 13:48 ` David Botton
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox