有没有一种简单的方法可以防止在创建 Ada DLL 时 Ada 名称被破坏?
这是我的 .adb 代码
with Ada.Text_IO;
package body testDLL is
procedure Print_Call is
begin
Ada.Text_IO.Put_Line("Hello World");
end Print_Call;
function Add_Nums(A,B : in Integer) return Integer is
begin
return A + B;
end Add_Nums;
end testDLL;
my .ads
package testDLL is
procedure Print_Call;
pragma export (dll, Print_Call, "Print_Call");
function Add_Nums(A,B : in Integer) return Integer;
pragma export (dll, Add_Nums, "Add_Nums");
end testDLL;
我的蟒蛇
import ctypes
TestDLL = ctypes.WinDLL ("libTestDLL.dll")
Print_Call = getattr(TestDLL, "Print_Call@0")
Print_Call()
您可以看到我必须在函数名称末尾添加“@0”,但是当我将相同的代码移动到不同的编译器时,这似乎会发生变化。这给我带来了一些问题。我需要一个标准的损坏格式或一种将损坏全部删除的方法。
您可以通过编译指示的 Link_Name 和External_Name 参数来控制对象名称,如下所示:
pragma Export (C, Print_Call, "Print_Call", "Print_Call");
或者,如果您使用 Ada2012,则可以使用方面来指定这些:
function Add_Nums(A,B : in Integer) return Integer
with Export, Convention => Ada, Link_Name => "Add_Nums";
以下内容涵盖了 Ada 的接口编译指示:http://www.ada-auth.org/standards/12rm/html/RM-J-15-5.html http://www.ada-auth.org/standards/12rm/html/RM-J-15-5.html
该主题进行了一些讨论,揭示了两者的差异:https://groups.google.com/forum/?fromgroups=#!searchin/comp.lang.ada/opengl/comp.lang.ada/6IVlMbtvrrU/mv3UUiDg5RwJ https://groups.google.com/forum/?fromgroups=#!searchin/comp.lang.ada/opengl/comp.lang.ada/6IVlMbtvrrU/mv3UUiDg5RwJ
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)