Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2014, 02:19   #1
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию Непонятное возникновение ошибки при работе с массивом

Всем привет.

Собственно, есть динамический массив, который создается в .dll, и возвращается функцией в программу, где должны вывестись строки этого массива. Проблема в том, что постоянно вылезает ошибка "Invalid Pointer Operation", что делать - понять не могу. Гугл ничего толкового не подкидывает...

Код в .dll:
Код:
type
  TWideStringsArray = array of WideString;

...

function CollectData: TWideStringsArray;
var
 arrOutData: TWideStringsArray;
 i: integer;
begin
 SetLength(arrOutData, Length(arrInData));
 for i := Low(arrInData) to High(arrInData) do
  begin
   arrOutData[i] := arrInData[i];
  end;

 Result := arrOutData;
end;
Вывод строк из полученного массива в программе:
Код:
type
  TWideStringsArray = array of WideString;

...

procedure GetCollectedData(arrOutData: TWideStringsArray);
var
 i: integer;
begin
 for i := Low(arrOutData) to High(arrOutData) do
  begin
   Form1.Memo1.Lines.Add(arrOutData[i]);
  end;
end;
В результате Memo1 заполняется строками из массива, и затем вылезает ошибка "Invalid Pointer Operation".

Может кто-нибудь подскажет, где ошибка засела? Уже замучился с этой проблемой, в гугле скоро точно забанят

UPD:
Причем, стоит заметить, что этот код исправно работает, если он весь содержится в одной программе (без библиотеки).

Последний раз редактировалось Xo66um; 15.11.2014 в 02:21.
Xo66um вне форума Ответить с цитированием
Старый 15.11.2014, 02:41   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

А там не надо SetLength(Result, ... ?
type_Oleg вне форума Ответить с цитированием
Старый 15.11.2014, 02:49   #3
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
А там не надо SetLength(Result, ... ?
В функции dll? Есть уже:
Код:
SetLength(arrOutData, Length(arrInData));

Последний раз редактировалось Xo66um; 15.11.2014 в 06:49.
Xo66um вне форума Ответить с цитированием
Старый 15.11.2014, 09:46   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А Sharemem подключен?
Если да то попробуй возвращать массив не результатом, а параметром-переменной.
Код:
function CollectData(var arrOutData:TWideStringsArray):Integer;
var
 i: integer;
begin
 SetLength(arrOutData, Length(arrInData));
 for i := Low(arrInData) to High(arrInData) do
  begin
   arrOutData[i] := arrInData[i];
  end;
 Result:=Length(arrOutData);
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.11.2014, 09:53   #5
Xo66um
Форумчанин
 
Регистрация: 11.05.2013
Сообщений: 154
По умолчанию

Stilet, спасибо) Подключил ShareMem - ошибка исчезла)
Xo66um вне форума Ответить с цитированием
Старый 15.11.2014, 13:26   #6
StriderX
Форумчанин
 
Регистрация: 21.04.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А Sharemem подключен?
Дельфи чуть посвежее на базе FastMM работают, поэтому доступен simpleSharemem - этот не требует никаких либ за собой таскать.
StriderX вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при работе с массивом кнопок Delphi Xaker_Two Помощь студентам 9 25.04.2014 12:12
Проблема при работе с массивом Shouldercannon Общие вопросы Delphi 0 28.05.2010 12:57
Ошибки при работе с WebBrowser Matra Компоненты Delphi 3 08.05.2010 08:15
Ошибки при работе с графикой. ReM Общие вопросы C/C++ 0 26.03.2009 13:41
Проблема при работе с массивом kAND Общие вопросы C/C++ 10 15.02.2009 19:30