Saya membuat fungsi generik dengan aspek Ekspor dan Konvensi. Kemudian saya membuat instance fungsi ini, tetapi berakhir di perpustakaan saya dengan akhiran 'r'. Mengapa ini terjadi dan bagaimana saya bisa memperbaikinya?

Sebagai contoh:

generic
   I : int;
function Test_Generic return int
   with Export => True, Convention => C;

function Test_Generic return int is
begin
   return I;
end;

function Test is new Test_Generic (I => 5);
-- In library this function has name testr
2
Андрей Гриценко 4 April 2021, 19:54

2 jawaban

Jawaban Terbaik

Jawaban yang lebih sederhana adalah memindahkan semua aspek ke instance generik, tetapi juga menambahkan aspek External_Name:

function Test is new Test_Generic (I => 5)
with Export, Convention => C, External_Name => "test";

Saya tidak mengerti mengapa External_Name diperlukan di sini, dan Ekspor tidak cukup.

5
Niklas Holsti 4 April 2021, 19:07

Saya belum dapat menyelesaikan masalah sepenuhnya, tetapi ini adalah solusi, dengan memindahkan aspek Eksternal dan Konvensi ke pembungkus di sekitar instance generik:

generic
   I : int;
function Test_Generic return int;

function Test_Generic return int is
begin
   return I;
end;

function Test_G is new Test_Generic (I => 5);

function Test return int
with Export, Convention => C;

function Test return int
is begin return Test_G; end Test;

Ini agak rumit, tetapi tampaknya berhasil.

2
Niklas Holsti 4 April 2021, 18:59