在不导出的情况下使用 pragma Convention
Using pragma Convention without export
我需要使用 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;
如果函数需要对链接器可见(例如,当您有 C 代码显式调用此函数时),您只需要 Export
。如果您只需要通过指针将函数传递到 Lua 运行时,函数上的 Convention => C
就足够了,尽管您还需要函数指针类型上的另一个 Convention => C
。
我需要使用 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;
如果函数需要对链接器可见(例如,当您有 C 代码显式调用此函数时),您只需要 Export
。如果您只需要通过指针将函数传递到 Lua 运行时,函数上的 Convention => C
就足够了,尽管您还需要函数指针类型上的另一个 Convention => C
。