powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / PChar или Variant в ДЛЛ-е...
8 сообщений из 8, страница 1 из 1
PChar или Variant в ДЛЛ-е...
    #32156429
Фотография ScableR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем дело в том, что я использую динамический массив типа PChar. На выходе получаю всякую х-ню. Но если использую Variant, то дело меняется координальным образом.
В чем могут быть проблемы при использовании Variant'a?
И еще, может кто подкинет ссылку на литературу по программированию ДЛЛ-ок.
...
Рейтинг: 0 / 0
PChar или Variant в ДЛЛ-е...
    #32156443
LG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблемы будут при изменении размера массива в длл.
Стандартная схема вызова:
1. Вызываем функцию для получения размера, необходимого для возвращения результата.
2. Аллочим память в хост апп и передаем поинтер в длл.
3. В длл пишем по этому поинтеру не больше затребованного размера.
4. Память освобождаем в хост апп.

Вроде так ...

www.rsdn.ru, delphi.mastak.ru etc.
...
Рейтинг: 0 / 0
PChar или Variant в ДЛЛ-е...
    #32156444
LG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, чуть не забыл, можно написать свой менеджер памяти или использовать ShareMem.
Еще вариат: COM DLL, но это отдельная песня ...
...
Рейтинг: 0 / 0
PChar или Variant в ДЛЛ-е...
    #32156446
jill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!
Литературы море... :) Первое, что попалось: http://www.citforum.ru/programming/digest/dlldelphi.shtml.
Если не подойдет, оставь здесь сообщение, пришлю еще (они у меня где-то валяются, скорее всего, дома).
...
Рейтинг: 0 / 0
PChar или Variant в ДЛЛ-е...
    #32157394
Фотография ScableR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2jill:
Если найдешь, то пришли еще, плз. Майл - scqbler@omen.ru.

2LG:
Дело в том, что количество требуемой памяти под данные определяется в длл-ке. Если можешь, то черкни пример плз.
...
Рейтинг: 0 / 0
PChar или Variant в ДЛЛ-е...
    #32157425
LG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне видится это так:
1. В dll есть функция Test(AValue: Pointer, ACnt: integer): integer;
2.
...
var
P: Pointer;
cnt: integer;
...
if Test(nil, cnt) = 0 then begin
P := аллочим cnt байт;
Test(P, cnt);
end;
...
Free(P);
...
Вообщем смысл как в первом моем посте. Вызываем ф-ю из длл, в длл выделяем память и пишем туда рез-ат, возвращаем успех/не успех и кол-во байт под результат. В Хост апп аллочим память и вызываем ф-ю еще раз, передаем туда поинтер, в ф-ции переписываем рез-ат по этому поинтеру. При необходимости освобождаем память и там и там ...

З.Ы. Варианты передаем VarArrayLock/Unlock.
...
Рейтинг: 0 / 0
PChar или Variant в ДЛЛ-е...
    #32157637
Фотография eNose
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[не активирован]
[не одобрен]
2 ScableR:
Допустим, есть процедура в DLL:
procedure QQQ (x: PChar);
begin
fDLLForm.Lable1.Caption := String(x);
end;

Вызываем ее из host-application:
{... LoadLibrary ...}
QQQ(PChar(Form1.Label1.Caption));

Что будет с fDLLForm.Lable1.Caption?
Может быть все нормально, а может всякая хрень случиться (типа "квадратиков" - зависит от шрифта).
Это глюки неявного преобразования типов. Достаточно сделать так:
procedure QQQ (x: PChar);
var s: String;
begin
s := String(x);
fDLLForm.Lable1.Caption := s;
end;

- и все будет нормально. Так что variant здесь совсем не при чем. В случае с variant передается handle объекта, а значит запись-чтение ведутся через методы объекта, а не напрямую - и никаких глюков, естественно, нет.
...
Рейтинг: 0 / 0
PChar или Variant в ДЛЛ-е...
    #32158071
Фотография ScableR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2jill:
Сорь, с мыло м ошибочка вышла :( scabler@omen.ru...

eNose & LG:
Сенкс, надеюсь, что заработает.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / PChar или Variant в ДЛЛ-е...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]