gpt4 book ai didi

c++ - 将指向 C++ 结构的指针传递给 Ada

转载 作者:搜寻专家 更新时间:2023-10-31 02:21:41 25 4
gpt4 key购买 nike

我在“MyData.h”中有一个 C++ 结构

struct MyData
{
int a;
int b;
};

我想将它的指针传递给 Ada 调用

#include "MyData.h"
extern "C" void ada_call(MyData* data);

void func()
{
MyData* data = new MyData();
ada_call(data);
}

我怎样才能构建一个接受这个的 Ada 函数?

最佳答案

解决方案有几个步骤。

您需要为该结构生成一条 Ada 记录。 g++ 有一个 built in tool for doing this .运行:

g++ -c -fdump-ada-spec "MyData.h" -C

您将获得一个 mydata_h.ads,其中包含与您的结构相匹配的记录定义。它应该看起来像这样:

with Interfaces.C; use Interfaces.C;

package MyData_h is

type MyData is record
a : aliased int; -- MyData.h:3
b : aliased int; -- MyData.h:4
end record;
pragma Convention (C_Pass_By_Copy, MyData); -- MyData.h:1

end MyData_h;

有了它之后,您需要编写一个将它作为参数的过程。此过程必须将其作为“访问”传递,然后必须将其导出,以便可以从 C 访问它。

data_function.ads:

with MyData_h;
use MyData_h;

package DATA_FUNCTION is
procedure ADA_CALL ( DATA : access MyData_h.MyData );
pragma Export(Convention=>C,Entity=>ADA_CALL,External_Name=>"ada_call");
end DataFunction;

数据函数.adb

with MyData_h;
use MyData_h;
with Interfaces.C; use Interfaces.C;

package body DATA_FUNCTION is

procedure ADA_CALL ( DATA : access MyData_h.MyData )
begin
DATA.a = 1;
DATA.b = 2;
end ADA_CALL;
end DATA_FUNCTION;

关于c++ - 将指向 C++ 结构的指针传递给 Ada,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31146698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com