Экспорт перегруженных функций с помощью fpc

Мне нужно создать DLL в рамках fpc (delphi-mode). Это работает нормально - но по некоторым причинам я хочу сделать что-то (в блоке), как

function doSomeThing(a:type1):type2;stdcall;
function doSomeThing(a:type3):type4;stdcall;

и в библиотеке (для построения dll с помощью модуля выше)

exports
    doSomeThing(a:type1) name 'doSomeThingTYPE1',
    doSomeThing(a:type3) name 'doSomeThingTYPE3';

Синтаксис не требует пояснений и описан в разделе Как экспортировать функции перегрузки из DLL?, Но он кажется недоступным в fpc (версия 2.6.0-9 [2013/04/14] для x86_64). Есть ли шанс сделать что-то подобное - или мне нужно переименовать функции в моем источнике?

2 ответа

Решение

Дэвид посоветовался со мной в другой ветке, я разработал что-то, что компилируется, но не знаю, работает ли это.

Он основан на экспорте функции с использованием определенного идентификатора уровня компоновщика, а затем на объявлении внешней функции с ее повторным импортом с разными именами на Паскале. Обратите внимание, что bla и bla2 даже не должны быть в одной единице с вариантами дозирования.

library testdll; 

{$mode delphi}
type 
   type1=integer;
   type3=char;
   type2=smallint;
   type4=widechar;

function doSomeThing(a:type1):type2;stdcall; overload; [public, alias:'bla'];
begin
  result:=a+1;
end;

function doSomeThing(a:type3):type4;stdcall; overload; [public, alias:'bla2'];
begin
  result:=widechar(ord(a)+1000);
end;

procedure bla; external name 'bla';
procedure bla2; external name 'bla2';
exports
    bla name 'doSomeThingTYPE1',
    bla2 name 'doSomeThingTYPE3';

end.

Вопрос, на который вы ссылаетесь, обсуждает Delphi. Синтаксис, который поддерживает Delphi, позволяющий экспортировать перегруженные функции, не поддерживается FPC.

Насколько я знаю, перегруженные функции не экспортируются. Хотя я мог легко ошибиться на этот счет. Возможно, есть способ, как предлагает Марко в своем ответе.

Другие вопросы по тегам