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

Вниз

Как достать WideString из DLL   Найти похожие ветки 

 
nitrino   (2004-05-28 16:16) [0]

Запутался уже.

Есть функция в ДЛЛ которая должна возвращать строку (WideString), программа получает строку, но она пуста. :(((

Описание функции в ДЛЛ:
function GetString (var X,Y:Integer) : WideString; stdcall; export;

Где-то читал что надо использовать PChar, но у меня все равно с ним не получалось (когда ставил PChar, то возврат строки делал так: Result := @Str; (Str типа WideString). Результат тот же!

Помогите пожалуйста сырцом или где можно про это почитать

Заранее спасибо


 
Cobalt ©   (2004-05-28 16:21) [1]

1) Объявляй строку как (Var Str:WideString)
2) Никогда не присваивай этой Str строку, делай именно копирование (т.е. выделение памяти именно под Str)


 
sniknik ©   (2004-05-28 16:35) [2]

самое главное когда dll делаеш прочитать предупрежденее

{ Important note about DLL memory management: ShareMem must be the
 first unit in your library"s USES clause AND your project"s ....

при соблюдении этого условия можно
function GetString (var X,Y:Integer) : WideString; stdcall; export;
Result:= Str; (Str типа WideString).


 
WebErr ©   (2004-05-28 16:35) [3]


>  (когда ставил PChar, то возврат строки делал так: Result
> := @Str; (Str типа WideString).

PChar это указатель не на String, а на Char. :)
Если
S: String; P: PChar;
то
S := P;
P := S;
и Делфи всё прекрасно поймёт.
И не надо никаких
P := @S;
Это из другой оперы.


 
Гаврила ©   (2004-05-28 16:40) [4]

>>Cobalt ©   (28.05.04 16:21) [1]

При присвоении значения WideString"у всегда производится полное копирование, в отличие от AnsiString

>>sniknik ©   (28.05.04 16:35) [2]

Это не относится к WideString


 
VMcL ©   (2004-05-28 17:07) [5]

>>Гаврила ©  (28.05.04 16:40) [4]

Относится. WideString - тип с управляемым временем жизни.


 
Гаврила ©   (2004-05-28 17:23) [6]

Что знавит "тип с управляемым временем жизни" ?
Если мы локальную переменную объявим как Integer, у нее тоже получится управляемое время жизни.
Under Win32, WideString values are not reference-counted

Далее, по сути объявление результата функции как WideString аналогично объявлению его как Var параметра.
Далее
On Win32, WideString is compatible with the COM BSTR type
При разработке внутренних COM серверов объявление результата как WideString допустимо. Разумеется, никакаими ShareMem в данном случае и не пахнет.


 
VMcL ©   (2004-05-28 17:45) [7]

>>Гаврила ©  (28.05.04 17:23) [6]

По WideString согласен. Integer - не явл. типом с упр. временем жизни, поскольку у него нет счетчика ссылок.


 
nitrino   (2004-05-29 02:46) [8]

Спасибо всем ответившим, поставил ShareMem и все заработало.

А если я эту ДЛЛ собираюсь вызвать из программы на VB, этот borlndmm.dll тоже надо таскать с собой? и вообще будет ли эта библиотека работать с VB ?


 
Германн ©   (2004-05-29 03:10) [9]

Если уж хочешь пользовать сию Dll с продуктами не от Borland, то проще(и лучше) всего перейти на PChar.



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

Форум: "Основная";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.04 c
14-1084601093
robyn
2004-05-15 10:04
2004.06.13
Стоит ли обновлять Microsoft Word 2000®


1-1086120048
ViPer
2004-06-02 00:00
2004.06.13
Как узнать высоту строки RichEdit а?


4-1084186382
Alexis
2004-05-10 14:53
2004.06.13
HOOK на создание нового процесса


3-1085175771
DmitryMN
2004-05-22 01:42
2004.06.13
Проблема с добавлением StoredProc


6-1082626827
-=Rezya=-
2004-04-22 13:40
2004.06.13
WinPCap-кара божья или манна небесная.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский