Exporting overloaded functions with fpc

吃可爱长大的小学妹 提交于 2019-12-08 07:35:26

问题


I need to create a dll within fpc (delphi-mode). It works fine - but for some reasons, I want to do something (in a unit) like

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

and in the library (for building the dll using the unit above)

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

The syntax is self explanatory and is told in How to export Overload functions from DLL? . But it seems to be unavailable in fpc (version 2.6.0-9 [2013/04/14] for x86_64). Is there a chance to do something like that - or do I have to rename the functions within my source?


回答1:


David consulted me in another thread, I devised something that compiles, but don't know if it works.

It is based on exporting the function using a defined linker level identifier, and then declaring an external function reimporting it with different Pascal names. Note that bla and bla2 doesn't even have to be in the same unit as dosomething variants.

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.



回答2:


The question that you link to discusses Delphi. The syntax that Delphi supports, that allows you to export overloaded functions, is not supported by FPC.

To the best of my knowledge, overloaded functions are not exportable. Although, I could easily be wrong on that score. Perhaps there is a way, as Marco proposes in his answer.



来源:https://stackoverflow.com/questions/22068653/exporting-overloaded-functions-with-fpc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!