Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

Как правильнее передавать строки в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.037 c
8-1121002140
Дмитрий Белькевич
2005-07-10 17:29
2005.12.11
Быстрый сдвиг массива точек на дробное значение точек.


14-1132476961
boriskb
2005-11-20 11:56
2005.12.11
Рекомендую сайт


5-1116060349
Нулевой
2005-05-14 12:45
2005.12.11
Как из ComboBox сделать DBLookUpComboBox?


14-1132662465
syte_ser78
2005-11-22 15:27
2005.12.11
есть ли прога помечающая беды на сд-рв?


3-1130411344
AlexLines
2005-10-27 15:09
2005.12.11
проблема с escape последовательностью





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский