你可以嘗試,如果你使用的是阿達2012編譯器添加Export
和Convention => X
方面的包;例如:
Package K with Export, Convention => C_Plus_Plus is
Function A(Input_1, Input_2 : Integer) return Integer;
End K;
這實際上編譯,但因爲我沒有任何C++或C混源項目試試這件,我不能告訴你,如果結果是嚴格講從C++側可用。
如果不起作用,也許是更好的方法是創建一個包特別適用於出口,這將在C++側使用的功能(和類型)。
With
System,
Interfaces.C.Strings,
Interfaces.C.Pointers;
Package K with Convention => C_Plus_Plus is
-------------
-- TYPES --
-------------
Type CPP_Window_Handle is Private;
Subtype CPP_String is Interfaces.C.Strings.chars_ptr;
--------------
-- MODULES --
--------------
Package UI_Module is
Procedure Set_Title(Window : CPP_Window_Handle; Text : CPP_String)
with Export;
End UI_Module;
Private
Package STUB_TYPES is
Type Window is tagged null record;
End STUB_TYPES;
Use STUB_TYPES;
Type CPP_Window_Handle is not null access Window'Class
with Convention => C_Plus_Plus, Size => Interfaces.C.int'Size;
End K;
實現爲:
Package Body K is
Package STUB_FUNCTIONS is
Procedure Set_Window(Object : in out STUB_TYPES.Window'Class; Text : String) is null;
--'
End STUB_FUNCTIONS;
Package Ada_Dependencies renames STUB_FUNCTIONS;
Package Body UI_Module is
Procedure Set_Title(Window : CPP_Window_Handle; Text : CPP_String) is
function Value (Item : CPP_String) return Interfaces.C.char_array
renames Interfaces.C.Strings.Value;
function Convert(Item : Interfaces.C.char_array;
Trim_Nul : Boolean := True) return String
renames Interfaces.C.To_Ada;
Begin
Ada_Dependencies.Set_Window(
Object => Window.all,
Text => Convert(Value(Text))
);
End Set_Title;
End UI_Module;
End K;
編譯出口,或相關方面,如果你有2012阿達工作,你在找什麼,至少我對你的目標的理解。你可以寫一個腳本來爲你生成那些輸出;這就是我要做的。 –
不好意思,我的意思是C或C++都可以。最好是C++。 – Tony
@PatrickKelly:您能否詳細說明您如何使用腳本?我之前從未使用腳本將ADA功能暴露給C.或者可能共享一個簡單的腳本。謝謝 – Tony