Ваша проблема не имеет ничего общего с соглашением о вызовах.
Несколько замечаний:
Глупый жук
Во-первых,
function MyFunction(MyParam1, MyParam2): boolean; stdcall;
- синтаксическая ошибка. Вы забыли указать типы MyParam1
и MyParam2
.
Видимость
Рассмотрим единицу
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
function Func1(MyParam1, MyParam2: integer): boolean;
implementation
function Func1(MyParam1, MyParam2: integer): boolean;
begin
ShowMessage('Func1');
end;
function Func2(MyParam1, MyParam2: integer): boolean;
begin
ShowMessage('Func2');
end;
end.
Только Func1
будет виден другим юнитам, потому что только Func1
является объявленным в разделе interface
. А интерфейс - это то, что видят другие устройства.
Соглашения о вызовах
Вы можете использовать stdcall
внутри своего проекта. Это не проблема вообще. Вы, вероятно, даже не заметите, что функция имеет «необычное» соглашение о вызовах.
перегруженные функции
Пара перегруженных функций (процедур) - это пара функций (процедур) с тем же именем, но с различными списками параметров , как в
function Add(A, B: integer): integer; overload;
function Add(A, B: real): real; overload;
Две функции не могут иметь одинаковые имена и списки параметров, даже если они перегружены. В самом деле, если бы это было разрешено, то как вообще компилятор узнает, какую функцию вы хотите вызвать?!