Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.11;
Скачать: CL | DM;

Вниз

Как правильнее передавать строки в DLL?   Найти похожие ветки 

 
Razor   (2005-11-14 05:48) [0]

...произвольной длины,  туда и обратно? С учетом того, что и длл и программа могут быть, и могут и не быть на дельфи?
Стоит ли использовать дельфовый менеджер памяти, или лучше брать память из хеапа, например?
Ответ интересует с точек зрения беспроблемности работы, и быстродействия.
Заранее спасибо.


 
MBo ©   (2005-11-14 07:09) [1]

>С учетом того ..
придется отказаться от дельфийских длинных строки и использовать PChar


 
Leonid Troyanovsky ©   (2005-11-14 08:31) [2]


> MBo ©   (14.11.05 07:09) [1]

> придется отказаться от дельфийских длинных строки и использовать
> PChar


Или WideString.

--
Regards, LVT.


 
Razor   (2005-11-14 13:15) [3]


> придется отказаться от дельфийских длинных строки и использовать
> PChar


> Или WideString.


Это понятно! Так и подразумевалось!
Вопрос в другом - как выделять память?
Через allocmem или getmem или allocheap или ...?
В одной программе я вообще увидел вариант передачи строк просто через pchar и strpas, без выделения памяти....


 
Leonid Troyanovsky ©   (2005-11-14 13:55) [4]


> Razor   (14.11.05 13:15) [3]

> > придется отказаться от дельфийских длинных строки и использовать
> > PChar

> > Или WideString.

> Вопрос в другом - как выделять память?


В первом случае память обычно выделяет вызывающее dll приложение.
Т.е., передается адрес распределенного буфера и его размер.

Во втором - это как сумеет то самое приложение,  что-нибудь типа
SysAllocStringLen.  В дельфи оно делается само.

--
Regards, LVT.


 
Digitman ©   (2005-11-14 13:58) [5]


> Razor


а лучшим решением будет оформление своего алгоритма в виде ole-сервера автоматизации

в этом случае головная боль с memory management сразу пропадает - всю черную работу берет на себя ОС


 
Razor   (2005-11-14 16:46) [6]

Надо мне учится лучше мысли формулировать....


> а лучшим решением будет оформление своего алгоритма в виде
> ole-сервера автоматизации

Это будет "из пушки по воробьям", если мне нужно парой строчек обмениваться....ИМХО.


> В первом случае память обычно выделяет вызывающее dll приложение.
>
> Т.е., передается адрес распределенного буфера и его размер.
>

Я прекрасно понимаю как это делается обычно. Меня интересует - как лучше. Ибо память можно выделять разными путями и из разных мест!


> Во втором - это как сумеет то самое приложение,  что-нибудь
> типа
> SysAllocStringLen.  В дельфи оно делается само.

Это если не выделять память напрямую, а делать просто pchar() и потом копировать в паскаль-строку?
Тогда возникают ещё вопросы:
- В какой момент этот пчар будет освобождаться?
- Если длл или программа не на дельфи - что будет?


 
Reindeer Moss Eater ©   (2005-11-14 16:53) [7]

Передавай всегда PChar.
Затем сразу делай копию там где принимаешь.


 
Digitman ©   (2005-11-14 17:10) [8]


> Меня интересует - как лучше


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


 
Leonid Troyanovsky ©   (2005-11-14 17:22) [9]


> Razor   (14.11.05 16:46) [6]
> Надо мне учится лучше мысли формулировать....

Золотые слова. Кста, к ним можно применить квантор всеобщности
(если мне не изменил склероз).

> > SysAllocStringLen.  В дельфи оно делается само.

> Это если не выделять память напрямую, а делать просто pchar()
> и потом копировать в паскаль-строку?
> Тогда возникают ещё вопросы:
> - В какой момент этот пчар будет освобождаться?
> - Если длл или программа не на дельфи - что будет?


Не, не pchar. В крайнем случае BSTR. Т.е., то, что выделяет SysAllocString.
Освобождаться оно будет при  SysFreeString (в вызывающем недельфийском
приложении). Или при SysReAllocString* в приложениии (or dll).

При манипуляциях в дельфийской dll могут быть как освобождения
(SysFree*), например, при выходе из диапазона видимости, так и
realloc, при увелечении длины строки.

Ну, а если все эти вещи представляются сомнительными, то лучший
путь - в требовании распределенного буфера (PChar, PWChar) + длина
буфера к хост-проиложению. В конце-концов, на этом Win32 простояла
не одну пятилетку.

--
Regards, LVT.



Страницы: 1 вся ветка

Текущий архив: 2005.12.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.046 c
14-1132550780
Дмитрий_05
2005-11-21 08:26
2005.12.11
Ругается на NativeAPI


14-1132063921
Johnmen
2005-11-15 17:12
2005.12.11
Тест...


2-1132914567
serko
2005-11-25 13:29
2005.12.11
Шифровка!


2-1132668007
romas_first
2005-11-22 17:00
2005.12.11
в CheckBox е изменить цвет иконки


4-1128284071
XeON
2005-10-03 00:14
2005.12.11
CD эмулятор