我现在想了解如何通过 Interfaces.C 包在 Ada 中传递标准布尔类型以调用 DLL 函数。Interfaces.C 包不包含 Ada Boolean 类型,因为布尔类型在 ANSI C 中不存在。我有一个用 C++ 编写的 DLL 函数,其导出的函数原型有一个 Bool 类型的参数。这是如何在 Intefaces.C 包中传递以调用 DLL 导出函数的?
问问题
2027 次
2 回答
4
传统上,在 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] 中所指定的:An implementation may provide additional declarations in the C interface packages.
所以检查你的实现Interfaces.C
,它可能包含一个bool
类型的定义。
于 2009-11-17T13:49:17.103 回答
0
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;
于 2017-03-14T17:28:01.057 回答