Экспорт перегруженных функций с помощью 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.
Насколько я знаю, перегруженные функции не экспортируются. Хотя я мог легко ошибиться на этот счет. Возможно, есть способ, как предлагает Марко в своем ответе.