Динамическая загрузка DLL

Здравствуйте. Не могу разобраться с вызовом функций из динамически загруженной DLL`ки.Код.Программа:
unit main;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, WinProcs;type  TForm1 = class(TForm)    Button1: TButton;    procedure Button1Click(Sender: TObject);  end;var  Form1: TForm1;implementation{$R *.dfm}          const  DLL_PATH = '..\dll\dll_test.dll';procedure TForm1.Button1Click(Sender: TObject);type  TFunc = function(): string; stdcall;var  LDllHandle : THandle;  LFunc : TFunc;begin  LDllHandle := LoadLibrary(DLL_PATH);  if LDllHandle <> 0 then    try      @LFunc := GetProcAddress(LDllHandle, 'getText');      ShowMessage(LFunc);    finally      FreeLibrary(LDllHandle);    end;end;end.
Библиотека:
library dll_test;uses  SysUtils, Classes, ShareMem;{$R *.res}function getText(): string; StdCall;begin  getText := 'Some text';end;exports ShowForm, getText;beginend.
При нажатии на "Button1", выводится окно с текстом "Some text". А после нажатии на "ОК", вываливается исключение: "Project dll_usage_text.exe raised exception class EInvalidPointer with message 'Invalid pointer operation'. Process stopped." И подсвечивается 44-ая строка. 
FreeLibrary(LDllHandle);
Подскажите, что я делаю не так? Спасибо.Windows XP SP3Borland Delphi 7
2 ответа

строки между dll и приложением можно передавать только shortstring, в смысле string[255], ибо разные менеджеры памяти.


С проблемой разобрался. Поставил библиотеку ShareMem в uses на первое место.ama_kid, это я знаю, но c библиотекой ShareMem можно и обычный string передавать.