我需要在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)中不可用。有没有机会做这样的事情 - 或者我是否必须在我的源代码中重命名函数?
答案 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.