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

Вниз

Присвоение WideString PWideChar   Найти похожие ветки 

 
Tobeus ©   (2008-09-25 01:30) [0]

В общем есть некая либа написанная на сях. Она передает юникодную строку через PWideChar.
В коде у меня так:

var
str1:WideString;
str2:PWideChar;

str2 это то что передает либа. str1 это то чем я пользуюсь у себя.

использую обычное присвоение:
str1:=str2;

И всё нормально, но только на отностительно небольших строках. Но на более менее больших строках (даже на 200КБ) на этом присвоение вылетает:
EAccesViolation in module "oleaut32.dll"

Видимо я как то с ними неправильно работаю. Подскажите в чем ошибка?

Delphi2007


 
Vlad Oshin ©   (2008-09-25 09:39) [1]

а так если?

str1:=WideString(str2^);


 
han_malign ©   (2008-09-25 10:20) [2]

куда передает, как передает - прототип функции приведи.

str1:=str2 - к "oleaut32.dll" отношения не имеет, ошибка в другом месте...


 
Сергей М. ©   (2008-09-25 10:31) [3]


> han_malign ©   (25.09.08 10:20) [2]


> str1:=str2 - к "oleaut32.dll" отношения не имеет


Ошибаешься, в данном случае имеет.


 
Сергей М. ©   (2008-09-25 10:39) [4]


> han_malign ©   (25.09.08 10:20) [2]


Конкретно при инициализации юникодовой строки происходит как минимум вызов oleaut32.SysAllocStrLen


 
Сергей М. ©   (2008-09-25 10:41) [5]

Подозреваю что дело вовсе не в длине строки, а в том что передаваемые данные строкой на самом деле не являются, а именно не содержат символа-терминатора.


 
Vlad Oshin ©   (2008-09-25 10:46) [6]


> передаваемые данные строкой на самом деле не являются, а
> именно не содержат символа-терминатора

тоже так думаю


 
Поросенок Винни-Пух ©   (2008-09-25 10:48) [7]

>строкой на самом деле не являются, а .....

а являются нилом.


 
Сергей М. ©   (2008-09-25 11:10) [8]


> а являются нилом


А нифига.

Ниловая ситуация обрабатывантся вполне корректно - проверка на нил производится перед самым первым вызовом ф-ции из oleaut32


 
han_malign ©   (2008-09-25 11:21) [9]


> а являются нилом.

- nil - штатное значение для (Wide)String


 
han_malign ©   (2008-09-25 11:24) [10]


> проверка на нил производится перед самым первым вызовом ф-ции из oleaut32

- поиск нуля тоже...


 
Tobeus ©   (2008-09-25 11:34) [11]

Exception вылетает именно на этой строке.

Написал я только не совсем точно. Всё происходит в моей dll, написанной в delphi. Ее вызывает другая dll написаная на сях. Эта dll мне передает указатель на юникодную строку, которую я уже обрабатываю. Первое действие в моей функции это именно присвоение. На строках поменьше никаких проблем, 100KB передается четко. А вот где то на 200KB вылетает эта ошибка.


 
Поросенок Винни-Пух ©   (2008-09-25 11:36) [12]

кто память распределяет под строку?


 
Tobeus ©   (2008-09-25 11:37) [13]

Ох, пока писал, уже ответов прибавилось. Насчет нуля проверим, хотя сомневаюсь, что в этом проблема, всё таки C++, у них там все строки такие.


 
clickmaker ©   (2008-09-25 12:04) [14]

а так?

SetLength(str1, lstrlenW(str1) * 2 + 1);
lstrcpyW(PWideChar(str1), str2);


 
Riply ©   (2008-09-25 12:40) [15]

> [12] Поросенок Винни-Пух ©   (25.09.08 11:36)
> кто память распределяет под строку?

Мне тоже будет интересен ответ этот вопрос :)


 
KSergey ©   (2008-09-25 13:32) [16]

К стати, если строка таких офигительных размеров - зачем ее переприсваивать дельфийской строке? Может с исходной и работать, если возможно?
Хотя в общем случае проблемы это явно не уберет.


 
Поросенок Винни-Пух ©   (2008-09-25 14:42) [17]

слабо верится что сишная либа распределяет память под строку, возвращает pwidechar на нее и не убивает саму строку после этого до самого прихода


 
KSergey ©   (2008-09-26 12:18) [18]

и тишина....


 
Сергей М. ©   (2008-09-26 12:24) [19]


> и тишина


Видать само собой рассосалась проблема)


 
Anatoly Podgoretsky ©   (2008-09-26 12:32) [20]

само собой?



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

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

Наверх





Память: 0.49 MB
Время: 0.008 c
2-1252381073
TOR
2009-09-08 07:37
2009.11.01
Создается нерабочий компонент


2-1252055512
Dabaz
2009-09-04 13:11
2009.11.01
График с логарифмической шкалой


1-1222137558
Vitaliy_____
2008-09-23 06:39
2009.11.01
Установка приоритета процесса


1-1222172199
zorik
2008-09-23 16:16
2009.11.01
Алгоритм наложения


15-1252038948
Ruzzz
2009-09-04 08:35
2009.11.01
Turbo Delphi не установить в Win7





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