Страница 1 из 1

Invalid Pointer Operation при работе с Dll

Добавлено: 18 мар 2005, 08:24
Dr.Grizzly
Вот такое вот сообщение выдает когда я делаю следующее:
В самой dll:

Код: Выделить всё

Function InfDisplayRes:String;
begin
InfDisplayRes:=IntToStr(Screen.Width)+'x'+IntToStr(Screen.Height);
end;

exports InfDisplayRes name 'InfDisplayRes';
В самой проге следующее:

Код: Выделить всё

...
 private
    { Private declarations }
  public
    { Public declarations }
  end;

Function InfDisplayRes:String;external 'PrFunc.dll';
...
var
....
procedure TForm1.Button2Click(Sender: TObject);
begin
Edit1.Text:=InfDisplayRes;
end;
После этой ошибки, она все же выдает результат в Edit1. Что не так???

Добавлено: 18 мар 2005, 14:38
Absurd
Хм... Если в С++ попытаться вернуть, скажем, std::string из dll, то можно напороться на то, что строчка живет в куче dll-ки, а не приложения. Приложение не умеет работать с чужой кучей, и разрушает кучу dll-ки.
Можно попытаться возвращать указатель на первый символ, а не String.

Добавлено: 20 мар 2005, 21:25
Naeel Maqsudov
Создайте DLL с помощью меню File/New...
Автоматически сгенеренный код будет содержать комментарии, в которых сказано, какой модуль надо к библиотеке подключить (что-то вроде ShareMem) чтобы можно было возвращать строки.

Все велосипеды уже изобретены.