微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 pragma 约定而不导出

如何解决使用 pragma 约定而不导出

我需要使用 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 函数指针类型。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。