使用fpc导出重载函数

时间:2014-02-27 12:33:44

标签: delphi dll overloading fpc

我需要在fpc(delphi-mode)中创建一个dll。它工作正常 - 但由于某些原因,我想做某事(在一个单元中),如

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

并在库中(使用上面的单元构建dll)

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

语法是自解释的,并在How to export Overload functions from DLL?中讲述。但它似乎在fpc(版本2.6.0-9 [2013/04/14] x86_64)中不可用。有没有机会做这样的事情 - 或者我是否必须在我的源代码中重命名函数?

2 个答案:

答案 0 :(得分:2)

您链接的问题讨论了Delphi。 FPC不支持Delphi支持的语法,允许您导出重载的函数。

据我所知,重载函数不可导出。虽然,我在这方面很容易出错。也许有一种方式,正如马可在他的回答中提出的那样。

答案 1 :(得分:1)

大卫在另一个帖子中咨询了我,我设计了一些可编译的东西,但不知道它是否有效。

它基于使用定义的链接器级别标识符导出函数,然后声明使用不同的Pascal名称重新导入它的外部函数。请注意,bla和bla2甚至不必与dosomething变体属于同一单元。

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.