Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Структура из DLL


9899100 ©   (2008-08-08 12:12:00) 

описана структура
загружаю DLL
вызываю процедуру параметром которой передаеться указатель на переменную типа структура
все намана структура заполняеться и все хорошо
но когда выгружаеться DLL
то переменная теряет все значения причем становиться вообще Inacessible Value

как передать структуру из DLL так чтобы данные сохранились после того как DLL будет выгружена????


Сергей М.   (2008-08-08 12:57:00) [1]


> переменная масив то тоже на самом деле указатель


Смотря какой массив ..


Dennis I. Komarov   (2008-08-08 12:56:00) [2]

Когда создаешь новую DLL почитай внимательно, что в коментариях написано...


9899100   (2008-08-08 12:51:00) [3]

Да уж :)
застрелиться и не встать
интересно всетаки
ну стоит String а не String[255]
как то читал что
по идее Delphi пользует тип стринг сходно с PChar
если явно не указать что он String[255]
ладно
но ведь переменная масив то тоже на самом деле указатель
хотя может я путаю с С++


DVM   (2008-08-08 12:31:00) [4]


> 9899100   (08.08.08 12:25) [10]

Короче, смотри как WinAPI сделано везде.


Medbe}I{onok XML   (2008-08-08 12:30:00) [5]

структуру ты уже благополучно передал без потерь.


DVM   (2008-08-08 12:29:00) [6]


> 9899100   (08.08.08 12:25) [10]

TProgramm=record
 Name: Pchar;
 NameLen: integer;
 Version: PChar;
 VersionLen: integer;
end;

Память под строки надо выделять НЕ В ДЛЛ. Если функция длл видит, что выделенной памяти недостаточно, то пусть возвращает ошибку или заполняет какое поле в структуре требуемыми значениями.


tesseract   (2008-08-08 12:29:00) [7]

Хотя наверно лучше array[255] of char - красивее будет.


tesseract   (2008-08-08 12:29:00) [8]


> может както изменить структуру чтобы это были не указатели
> а именно данные


string[255]


Сергей М.   (2008-08-08 12:29:00) [9]


> это не красиво


А красиво разве рубить сук, на котором сидишь ?
Именно это ты и делаешь)

Давай уже показывай код..


9899100   (2008-08-08 12:25:00) [10]

>>Medbe}I{onok XML
тупо копировать каждую строку??
это не красиво :)

может както изменить структуру чтобы это были не указатели а именно данные


9899100   (2008-08-08 12:23:00) [11]

>> Сергей М. ©
ессесно
и я вижу где теряеться значение
оно теряеться когда я делаю Freelibrary
и это тоже понятно
отсюда и вопрос
"как передать структуру из DLL так чтобы данные сохранились после того как DLL будет выгружена????"


Сергей М.   (2008-08-08 12:21:00) [12]


> 9899100   (08.08.08 12:19) [6]


> программа выдет ессесно ошбку


Ты в [5] вник ?


Medbe}I{onok XML   (2008-08-08 12:20:00) [13]

строки остались в длл, мувом переносятся указатели, которые протухают после выгрузки длл.


9899100   (2008-08-08 12:19:00) [14]

>>Сергей М. ©
это в отладчике ессесно
так программа выдет ессесно ошбку


Сергей М.   (2008-08-08 12:19:00) [15]

Я же тебе уже указал на грабли в

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1218102039&n=18

А ты не внемлешь)


9899100   (2008-08-08 12:18:00) [16]

вот такая вот структура
передаеться перменная типа PProgramm

Type PProgramm=^TProgramm
    TProgramm=record
      name:String;
      Version:String;
    end;


Сергей М.   (2008-08-08 12:17:00) [17]


> Inacessible Value


Это отказ, характерный для отладчика, когда контролируемое тобой значение выходит из текущей области видимости. Не более того.

К сохранению каких-то ьтам данных это сообщение не имеет отношения.


DVM   (2008-08-08 12:16:00) [18]

Структуру покажи, там что есть поля-указатели что ли?


9899100   (2008-08-08 12:16:00) [19]

попробовал командой MOVE  переписать переданную структуру в другую переменную..... переписывает но все равно когда выгружаю DLL теряеться её значение :(


Наверх

Титульная страница Поиск, карта сайта Написать письмо