Имеется проверочный модуль TestExport, в котором экспортируются процедуры Foo, Foo2 и переменные.
## Код:
```
PROCEDURE Foo* (IN path: Files.Name; name: Files.Name; OUT error: BOOLEAN);
PROCEDURE Foo2* (OUT error: BOOLEAN);
```

Определив в интерфейсной части описания этих процедур в Free Pascal
## Код:
```
TFooProc = procedure (path, name: Pchar; var error: boolean); stdcall;
    TFoo2Proc = procedure (var error: boolean); stdcall;
```
я получаю исключение при попытке выполнить процедуру Foo, однако, Foo2 выполняется гладко. DLL загружается динамически.
В Foo пробовал вместо Pchar выставить WideString, Array Of Char - не помогло.

Как правильно объявить Foo?

## Код:
```
MODULE TestExport;

IMPORT Files;

TYPE
   TA* = RECORD
      d-,
      d2-: REAL;
   END;
   
VAR
   Int-: INTEGER;
   A-: TA;

PROCEDURE Foo* (IN path: Files.Name; name: Files.Name; OUT error: BOOLEAN);
BEGIN
   (*error := (name = "")*)
   error := TRUE
END Foo;

PROCEDURE Foo2* (OUT error: BOOLEAN);
BEGIN
   error := TRUE
END Foo2;

BEGIN
   A.d := 321.345;
   A.d2 := A.d*2.0;
   Int := 3*1024
END TestExport.
```

^QDevLinker.LinkDll export.dll := Kernel+ Files TestExport# ~

## Код:
```
Unit uexport;

Interface

Const

{$ifdef win32}
    Lib = 'export.dll';
  {$IFDEF FPC}
    {$smartlink on}
  {$ENDIF}
{$else}
    Lib = 'export.so';
{$endif}

type
    TA = record
        d,
        d2: double
    end;
    TFooProc = procedure (path, name: Pchar; var error: boolean); stdcall;
    TFoo2Proc = procedure (var error: boolean); stdcall;

Implementation

begin
end.
```


## Код:
```
{$IFDEF FPC}
    {$mode delphi}
{$ENDIF}

program testexp;

uses
    HostModuleLoader, uexport;

var
    M: TDynLoadModule;
    pInt: pInteger;
    pA: ^TA;
    FooProc: TFooProc;
    Foo2Proc: TFoo2Proc;
    er: boolean;

begin
    M := TDynLoadModule.Create();
    if M.LoadModule (Lib) then
    begin
        writeln ('Loaded');
        pInt := M.GetModuleSymbol('Int');
        pA := M.GetModuleSymbol('A');
        @FooProc := M.GetModuleSymbol('Foo');
        @Foo2Proc := M.GetModuleSymbol('Foo2');

        if Assigned (pInt) then writeln (pInt^);
        if Assigned (pA) then begin
            writeln (pA^.d:8:2);
            writeln (pA^.d2:8:2);
        end;
        if Assigned (Foo2Proc) then begin
            writeln('Foo2 test');
            Foo2Proc (er);
            writeln (er);
        end;
        if Assigned (FooProc) then begin
            writeln('Foo test');
            FooProc ('', '', er);
            writeln (er);
        end;
        
        M.UnloadModule;
    end
    else writeln ('failed to load.');
    M.Free;
end.
```
