Консультация № 43594
19.05.2006, 16:41
0.00 руб.
0 7 2
Здравствуйте уважаемые эксперты. Такая вот проблема. Загружаю явно DLL и присваиваю некой переменной значение, возвращаемое функцией из DLL. Как только выполняется FreeLibrary, значение этой переменной теряется. Но пока DLL в памяти всё хорошо. Уменя вопрос:"Это так задумано, или я чего не так делаю."

Обсуждение

Неизвестный
19.05.2006, 17:22
общий
это ответ
Здравствуйте, Popcov!
"Чего то вы не так делаете" :)
Значение может потеряться, если вы получали из dll указатель на структуру(класс, ...). А если вы возвратили какое-нибудь число, то оно не потеряется. Проблемы могут быть, если возвращать String.
Неизвестный
19.05.2006, 18:11
общий
Я возвращаю массив из записей, а в записях как раз присутствуют поля типа String и Boolean. Как в таком случае решить проблему?
давно
Мастер-Эксперт
425
4118
20.05.2006, 13:46
общий
это ответ
Здравствуйте, Popcov!
100% Вы что-то не так делаете, но без кода этого понять невозможно.
Приведу пример:
var
i: integer;
Begin
i:=FinctionIntoDll();
End;
Переменная i - это область памяти, котороая определена для Вашей программы. Чтобы Вы ни делали с библиотекой - открывали, закрывали - переменную Вы никоем образом не трогаете. Поэтому пожалуйста приведите код.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
20.05.2006, 21:27
общий
Здравствуйте уважаемые эксперты. По вашей просьбе выкладываю фрагмент кода программы.TestMass является массивом записей с полями типа String и Boolean. У функции внутри DLL тотже тип. Тип InitTest естественно определён как функция. Код процедуры ниже.procedure TForm1.FormCreate(Sender: TObject); var dllHandle: THandle; IT: InitTest;begin dllHandle:=LoadLibrary(‘rmtest.dll‘); if dllHandle=0 then exit; @IT:=GetProcAddress(dllHandle, ‘InitTest200335‘); if @IT=nil then exit; TestMass:=IT; {в TestMass то что нужно} FreeLibrary(dllHandle); {значение TestMass то ли не определено, толи не т его там}end;
давно
Мастер-Эксперт
425
4118
23.05.2006, 13:41
общий
Что такое TestMass и какое значение возвращает функция IT?
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
23.05.2006, 17:05
общий
TestMass - это переменная типа массиво записей с полями типа String и Boolean.TestMass: Array [1..30] of record Q,,A1,A2,A3,A4,A5: String; AF: Boolean; end;IT возвращает тоже значение.
давно
Мастер-Эксперт
425
4118
24.05.2006, 05:24
общий
Попробуйте, вместо массива передавать в функцию и соответственно получать от функции, указатель на массив.И еще, может это не имеет значение, но все же, тип String в Дельфи - это скрытая динамическая переменная, т.е. под нее менеджером памяти дельфи происходит выделение памяти, скрытое от программиста. Попробуйте вместо String использовать PChar, и уже память для него выделять самостоятельно.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Форма ответа