作者:putongren1980 | 来源:互联网 | 2023-09-25 21:48
我需要使用Lua的Ada库。我想使用一个通用包,它与其他数据一起将包含一个函数,该函数将根据数据以不同的名称在Lua中注册。据我了解,我应该将这个函数声明为“withExpo
我需要使用 Lua 的 Ada 库。我想使用一个通用包,它与其他数据一起将包含一个函数,该函数将根据数据以不同的名称在 Lua 中注册。据我了解,我应该将这个函数声明为“with Export,COnvention=> C”,但是当实例化这样一个包的几个实例时,库将包含几个具有相同名称的函数并且它不会编译。在这种情况下是否可以不使用“Export”,而只使用“COnvention=> C”,因为在 Lua 中仅使用函数引用进行注册?
with System; use System;
with Interfaces.C; use Interfaces.C;
generic
type Data is private;
Name : String;
package P is
function Call (Lua : Address) return int
with Export, COnvention=> C;
function Get_Name return String is (Name);
end P;
回答
仅Export
当函数需要对链接器可见时才需要(例如,当您有 C 代码显式调用此函数时)。如果您只需要通过指针将函数传递到 Lua 运行时,COnvention=> C
在函数上就足够了,尽管您还需要另一个COnvention=> C
函数指针类型。