防止Ada DLL中的错位名称

Jon*_*ump 3 python dll ada name-mangling

在创建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;
Run Code Online (Sandbox Code Playgroud)

我的.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;
Run Code Online (Sandbox Code Playgroud)

我的python

import ctypes

TestDLL = ctypes.WinDLL ("libTestDLL.dll")
Print_Call = getattr(TestDLL, "Print_Call@0")
Print_Call()
Run Code Online (Sandbox Code Playgroud)

你可以看到我必须在函数名的末尾添加'@ 0',但是当我将相同的代码移动到不同的编译器时,这似乎会改变.这给我带来了一些问题.我需要一个标准的修改格式或一种方法来删除整个修改.

Sha*_*rk8 5

您可以通过编译指示的Link_Name和External_Name参数控制对象名称,如下所示:

pragma Export (C, Print_Call, "Print_Call", "Print_Call");
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用的是Ada2012,则可以使用方面来指定这些:

function Add_Nums(A,B : in Integer) return Integer
    with Export, Convention => Ada, Link_Name => "Add_Nums";
Run Code Online (Sandbox Code Playgroud)

以下内容涵盖了Ada的接口实用程序: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