Delphi 用fpc导出重载函数

Delphi 用fpc导出重载函数,delphi,dll,overloading,fpc,Delphi,Dll,Overloading,Fpc,我需要在fpc(delphi模式)中创建一个dll。它工作得很好——但出于某些原因,我想(在一个单元中)做一些事情,比如 和库中(用于使用上述单元构建dll) 语法是不言自明的,并在中说明。但它似乎在fpc中不可用(x86_64的2.6.0-9[2013/04/14]版)。是否有机会这样做?或者我必须重命名源代码中的函数?您链接到的问题讨论了Delphi。FPC不支持Delphi支持的语法,该语法允许您导出重载函数 就我所知,重载函数是不可导出的。尽管如此,在这一点上我很可能是错的。也许有办法,

我需要在fpc(delphi模式)中创建一个dll。它工作得很好——但出于某些原因,我想(在一个单元中)做一些事情,比如

和库中(用于使用上述单元构建dll)


语法是不言自明的,并在中说明。但它似乎在fpc中不可用(x86_64的2.6.0-9[2013/04/14]版)。是否有机会这样做?或者我必须重命名源代码中的函数?

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


就我所知,重载函数是不可导出的。尽管如此,在这一点上我很可能是错的。也许有办法,正如马可在他的回答中提出的那样

David在另一个线程中咨询了我,我设计了一些编译的东西,但不知道它是否有效

它基于使用定义的链接器级别标识符导出函数,然后声明一个外部函数,并使用不同的Pascal名称重新导入它。请注意,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.

嗨,大卫,这符合我的经验-但它记录在任何地方-或将在不久的将来改变吗?我不知道。我不是fpc专家(委婉地说)。嗨,马可,这是一个非常酷的解决方法。我会等一会儿,如果没有真正的答案,我会接受它作为解决方案。谢谢。让我知道它是否有效(您可以成功调用函数)
exports
    doSomeThing(a:type1) name 'doSomeThingTYPE1',
    doSomeThing(a:type3) name 'doSomeThingTYPE3';
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.