処理のために、AdaプログラムからいくつかのC++コードに2つのデータを渡す必要があります。AdaからC++へ:符号なし64ビット値を渡す
- データ - ダブル。
- 時間符号なし64ビット。
私はLONG_FLOAT(C++のdouble)と整数(C++のint、しかし、明らかではない64ビット)を使用して、私のC++の方法で働いていたエイダの手順を作ることができました。 私は、次のコード(私のコードではありませんので、構文が少しオフになる場合もあります)を使用:
procedure send_data (this : in hidden_ptr; data : in Long_Float; time : in Integer);
pragma import (CPP, send_data, "MyClass::sendData");
今それが働いていることを、私は完全な64ビットまでの時間を拡大しようとしていると理想的にしたいと思いますC++側で符号なしlong longを持つ
type U64 is mod 2 ** 64;
私のSEND_DATA方法とその型を使用して私はその型をマッピングすることも可能な方法が存在しないというエラーが出ます:私は、私は自分のタイプを作成したことと一致するエイダのいずれかの種類が表示されませんC++の型(これらの行には何かがありますが、私にはコードや正確なエラーフレーズはありません)。
Adaでユーザー定義型をC++に渡す方法はありますか?おそらく、私が使える符号なし64ビット値として使用できる別のタイプのAdaがありますか?それは私のU64型のアドレスをパラメータとしてC++メソッドに渡す方法がありますか?私は緑の丘adamultiコンパイラv3.5を使用しています(非常に新しく、その情報が役立つかどうかわからない)。例は非常に高く評価されるでしょう! KeithThompsonさんのコメント/答え@への補遺として
「mod 2 ** 64」は正しいはずです。 GNATでその型を使ってあなたのサンプルをコンパイルすると、それは不平を言うことはありません。おそらく、あなたのAdaコンパイラは、C++(またはそれがターゲットとするC++コンパイラ)が64ビットの符号なし型をサポートしているとは思わないでしょう。標準のC++は2011年のISO標準まで 'unsigned long long'を取得していませんでした。 –
@KeithThompson - Bah!あなたの答えのこれらの良いコメントをしてくださいキース、私のupvotes何かを意味する、私は彼らに適切にコメントすることができます、そして、彼らは答えになる場合、彼らは受け入れることができます。 –
'pragma Convention(CPP、U64);'を追加することができます。 –