Re: Calling Ada from C
- From: "Jeffrey R. Carter" <jrcarter@xxxxxxx>
- Date: Wed, 28 Feb 2007 02:54:57 GMT
hannibal.holm@xxxxxxxxx wrote:
The data structure in C is just a pointer to a block of data to be
sent over a network link. This need to be converted to a byte array
defined as:
Byte_Size : constant := 8;
type Byte is range 0 .. 2**Byte_Size - 1;
for Byte'Size use Byte_Size;
Anything you use to talk to C should be convention C. Since, from below, in C this seems to be char, you should use Interfaces.C.Char and Interfaces.C.Char_Array. Since Char_Array is convention C, Ada won't expect it to have bounds associated with it.
type Byte_Array is array (Natural range <>) of Byte;
pragma Pack (Byte_Array);
As said, I am not extremly familiar with Ada and come from a C-
background, so I have a few problems trying to figure out what the ada
runtime and type system actually does. I tried something like
-- This proc is exported as with C-conventions
procedure Some_Ada_Proc(Msg : in Byte_Array;
Len : in Natural) is
Msg_Constr : Byte_Array := Msg(0 .. Length - 1);
Again, you should use Interfaces.C.Int instead of Natural.
Where does Length come from?
This is called with:
char foo[] = {0xde, 0xad, 0xbe, 0xef};
some_ada_proc(foo, sizeof(foo)); // sizeof static array = 4
This is where I get char from above.
If using Char_Array still crashes, you can use a very large constrained subtype of Char_Array:
subtype Many_Chars is Interfaces.C.Char_Array (Interfaces.C.Size_T);
and slice the result with 0 .. Interfaces.C.Size_T (Len). This can then be converted into your array of Bytes.
--
Jeff Carter
"I would never want to belong to any club that
would have someone like me for a member."
Annie Hall
41
.
- References:
- Calling Ada from C
- From: hannibal.holm@xxxxxxxxx
- Re: Calling Ada from C
- From: Stephen Leake
- Re: Calling Ada from C
- From: hannibal.holm@xxxxxxxxx
- Calling Ada from C
- Prev by Date: Re: recent changes in compiler pricing
- Next by Date: NXTAda
- Previous by thread: Re: Calling Ada from C
- Next by thread: Preferred OS, processor family for running embedded Ada?
- Index(es):
Relevant Pages
|