2014-02-27 14 views
0

Мне нужно создать dll внутри fpc (delphi-mode). Он отлично работает - но по некоторым причинам, я хочу сделать что-то (в единицах измерения), какЭкспорт перегруженных функций с помощью fpc

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). Есть ли возможность сделать что-то подобное - или мне нужно переименовать функции внутри моего источника?

ответ

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. 
+0

Привет, Марко, это довольно крутое обходное решение. Я немного подожду - и если ответа не будет, я приму это решение. Благодарю. –

+0

Сообщите мне, если это работает (вы можете успешно вызвать функции) –

2

Вопрос, на который вы ссылаетесь, обсуждает Delphi. Синтаксис, поддерживаемый Delphi, который позволяет экспортировать перегруженные функции, не поддерживается FPC.

Насколько мне известно, перегруженные функции не подлежат экспортной обработке. Хотя, я мог легко ошибаться на этот счет. Возможно, есть способ, как предлагает Марко в своем ответе.

+0

Привет, Дэвид, это соответствует моему опыту - но это документировано где угодно - или это будет изменено в ближайшем будущем? –

+2

Не знаю. Я не специалист по fpc (мягко говоря). –

Смежные вопросы