Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
PChar или Variant в ДЛЛ-е...
|
|||
|---|---|---|---|
|
#18+
В общем дело в том, что я использую динамический массив типа PChar. На выходе получаю всякую х-ню. Но если использую Variant, то дело меняется координальным образом. В чем могут быть проблемы при использовании Variant'a? И еще, может кто подкинет ссылку на литературу по программированию ДЛЛ-ок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 18:10 |
|
||
|
PChar или Variant в ДЛЛ-е...
|
|||
|---|---|---|---|
|
#18+
Проблемы будут при изменении размера массива в длл. Стандартная схема вызова: 1. Вызываем функцию для получения размера, необходимого для возвращения результата. 2. Аллочим память в хост апп и передаем поинтер в длл. 3. В длл пишем по этому поинтеру не больше затребованного размера. 4. Память освобождаем в хост апп. Вроде так ... www.rsdn.ru, delphi.mastak.ru etc. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 18:34 |
|
||
|
PChar или Variant в ДЛЛ-е...
|
|||
|---|---|---|---|
|
#18+
Да, чуть не забыл, можно написать свой менеджер памяти или использовать ShareMem. Еще вариат: COM DLL, но это отдельная песня ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 18:36 |
|
||
|
PChar или Variant в ДЛЛ-е...
|
|||
|---|---|---|---|
|
#18+
Привет! Литературы море... :) Первое, что попалось: http://www.citforum.ru/programming/digest/dlldelphi.shtml. Если не подойдет, оставь здесь сообщение, пришлю еще (они у меня где-то валяются, скорее всего, дома). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2003, 18:38 |
|
||
|
PChar или Variant в ДЛЛ-е...
|
|||
|---|---|---|---|
|
#18+
2jill: Если найдешь, то пришли еще, плз. Майл - scqbler@omen.ru. 2LG: Дело в том, что количество требуемой памяти под данные определяется в длл-ке. Если можешь, то черкни пример плз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 12:56 |
|
||
|
PChar или Variant в ДЛЛ-е...
|
|||
|---|---|---|---|
|
#18+
Мне видится это так: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 13:11 |
|
||
|
PChar или Variant в ДЛЛ-е...
|
|||
|---|---|---|---|
|
#18+
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 объекта, а значит запись-чтение ведутся через методы объекта, а не напрямую - и никаких глюков, естественно, нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2003, 15:34 |
|
||
|
PChar или Variant в ДЛЛ-е...
|
|||
|---|---|---|---|
|
#18+
2jill: Сорь, с мыло м ошибочка вышла :( scabler@omen.ru... eNose & LG: Сенкс, надеюсь, что заработает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.05.2003, 02:10 |
|
||
|
|

start [/forum/topic.php?fid=58&fpage=2045&tid=2118341]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 398ms |

| 0 / 0 |
