在 Interfaces.C 中传递布尔 Ada 类型

发布于 2024-08-11 08:48:46 字数 186 浏览 4 评论 0原文

我现在想知道如何通过 Interfaces.C 包传递 Ada 中的标准布尔类型以调用 DLL 函数。 Interfaces.C 包不包含 Ada 布尔类型,因为 ANSI C 中不存在布尔类型。 我有一个用 C++ 编写的 DLL 函数,其导出的函数原型有一个 Bool 类型的参数。这是如何在 Intefaces.C 包中传递以调用 DLL 导出函数的?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

呆° 2024-08-18 08:48:46

传统上,在 C 中,布尔值用 int 类型表示。在 C++ 中,定义了 bool 类型,但请注意小写的“b”。如果你的参数是 Bool 类型(注意大写的“B”),那么你应该在某个地方(在你的 C++ 库中)有一个类声明,它会告诉你有关该类型实现的更多信息。通常,这样的 Bool 类通过语言的某些工件与标准 bool 类型兼容:Bool 类不定义虚函数,并将其值保留在明智地放在类定义中第一位的成员中。

我没有测试它,但我想说你可以使用 int 类型。进行测试以确保它被 C++ 函数接受。要从 Boolean 转换为 int,您可以使用类似 Interfaces.C.int(Boolean'Pos(your_bool_value)) 的方法。

另请注意,根据 Ada 参考手册 [B.3.62] 中的规定:实现可能会在 C 接口包中提供附加声明。 因此请检查您的 Interfaces.C 实现>,它可能包含 bool 类型的定义。

traditionally, in C, a boolean is represented with an int type. in C++, a bool type is defined, but note the lowercase 'b'. if your argument is of type Bool (note the uppercase 'B') then you should have a class declaration somewhere (in your C++ library) which will tell you more about the implementation of the type. generally, such a Bool class is made compatible with a standard bool type through some artifact of the language: the Bool class defines no virtual function and keeps its value in a member judiciously placed first in the definition of the class.

i did not test it, but i would say you can go with an int type. make a test to be sure it is accepted by the C++ function. for converting from Boolean to int, you may use something like Interfaces.C.int(Boolean'Pos(your_bool_value)).

also note that, as specified in the Ada Reference Manual [B.3.62]: An implementation may provide additional declarations in the C interface packages. so check your implementation of Interfaces.C, it may contain a definition for a bool type.

莫言歌 2024-08-18 08:48:46
type Boolean_2_Int is (Bool : Boolean := False) is
record
    I : Interfaces.C.Unsigned_Long := 0;
    case Bool is
       when True => 
          I := 1;
       when False => 
          I := 0;
    end case;
end record;
type Boolean_2_Int is (Bool : Boolean := False) is
record
    I : Interfaces.C.Unsigned_Long := 0;
    case Bool is
       when True => 
          I := 1;
       when False => 
          I := 0;
    end case;
end record;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文