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

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Dr.Grizzly
Сообщения: 50
Зарегистрирован: 09 мар 2005, 13:57
Контактная информация:

Вот такое вот сообщение выдает когда я делаю следующее:
В самой 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. Что не так???
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Хм... Если в С++ попытаться вернуть, скажем, std::string из dll, то можно напороться на то, что строчка живет в куче dll-ки, а не приложения. Приложение не умеет работать с чужой кучей, и разрушает кучу dll-ки.
Можно попытаться возвращать указатель на первый символ, а не String.
2B OR NOT(2B) = FF
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

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

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