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

Вниз

Присвоение 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.015 c
2-1252555458
FEV
2009-09-10 08:04
2009.11.01
Станное поведение программы.


15-1251654107
Когда
2009-08-30 21:41
2009.11.01
Когда Вы в последний раз...


9-1183153929
Book
2007-06-30 01:52
2009.11.01
Поделитесь какимнибудь классом или функциями для сохранения в 3ds


2-1252921892
dmitry83-nv
2009-09-14 13:51
2009.11.01
2 поля данных в ListBox


15-1251556679
Дмитрий С
2009-08-29 18:37
2009.11.01
Почему MS не подписывает такие файлы как kernel32.dll?