Ho bisogno di passare 2 pezzi di dati da un programma Ada ad un codice C++ per l'elaborazione.Ada a C++: passare un valore a 64 bit senza segno
- Dati - doppio.
- Tempo: 64 bit senza segno.
ho potuto fare una procedura in Ada che funzionava con il mio metodo C++ utilizzando un Long_Float (single nel C++) e integer (int in C++, ovviamente non 64 bit però). Ho usato il seguente codice (codice non su di me in modo sintassi potrebbe essere leggermente fuori):
procedure send_data (this : in hidden_ptr; data : in Long_Float; time : in Integer);
pragma import (CPP, send_data, "MyClass::sendData");
Ora che che sta lavorando, sto cercando di espandere il tempo per la piena a 64-bit e Preferirei avere un long lungo non firmato sul lato C++. Non vedo alcun tipo di Ada che corrispondono che così ho creato il mio tipo:
type U64 is mod 2 ** 64;
Quando si utilizza questo tipo con il mio metodo Send_Data ho un errore dicendo che ci sono modi possibili per mappare questo tipo ad un Tipo C++ (qualcosa di simile, di nuovo non ho il codice o la frase esatta dell'errore su di me).
C'è un modo per passare un tipo definito dall'utente in Ada a C++? Forse c'è un altro tipo in Ada che posso usare come un valore a 64 bit senza segno che funzionerebbe? Esiste un modo per passare l'indirizzo del mio tipo U64 come parametro al metodo C++ se invece è più semplice? Sto usando il green hills adamulti compilatore v3.5 (molto nuovo ad ada, non sono sicuro se quell'informazione aiuti o meno). Gli esempi sarebbero molto apprezzati!
'mod 2 ** 64' dovrebbe essere corretto. Quando compilo il tuo esempio usando quel tipo con GNAT, non si lamenta. Forse il tuo compilatore Ada non pensa che C++ (o il compilatore C++ a cui mira) supporti un tipo senza segno a 64 bit; lo standard C++ non ha ottenuto "unsigned long long" fino allo standard ISO del 2011. –
@KeithThompson - Bah! Rendi questi tuoi buoni commenti, risponde Keith, quindi i miei upvotes significano qualcosa, posso commentarli correttamente e possono essere accettati se finiscono per essere la risposta. –
Si potrebbe provare ad aggiungere 'pragma Convention (CPP, U64);'. –