I would like to now how to pass a standard Boolean Type in Ada through the Interfaces.C package in order to call a DLL function. The Interfaces.C package does not contain the Ada Boolean type since the boolean type does not exist in ANSI C. I have a DLL function written in C++ whose exported function prototype has an argument of type Bool. How is this passed in the Intefaces.C package in order to call the DLL exported function?
2 に答える
伝統的に、C ではブール値は型で表されint
ます。C++ ではbool
型が定義されていますが、小文字の 'b' に注意してください。引数が型Bool
(大文字の 'B' に注意) である場合、型の実装について詳しく説明するクラス宣言を (C++ ライブラリ内の) どこかに置く必要があります。一般に、このような Bool クラスは、言語のアーティファクトによって標準の bool 型と互換性があります。Bool クラスは仮想関数を定義せず、クラスの定義の最初に慎重に配置されたメンバーにその値を保持します。
私はそれをテストしませんでしたが、int
タイプを使用できると思います。C++ 関数によって受け入れられることを確認するテストを行います。ブール値から に変換するにはint
、 のようなものを使用できますInterfaces.C.int(Boolean'Pos(your_bool_value))
。
また、Ada リファレンス マニュアル [B.3.62] で指定されているAn implementation may provide additional declarations in the C interface packages.
ように、 の実装を確認してください。型Interfaces.C
の定義が含まれている可能性があります。bool