Главная страница
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.016 c
2-1252654969
eu1bc
2009-09-11 11:42
2009.11.01
Обработка ошибок


15-1252159778
Ruzzz
2009-09-05 18:09
2009.11.01
Turbo Delphi не хочет компилировать .rc


15-1251876806
@!!ex
2009-09-02 11:33
2009.11.01
Порекомендуйте FTP сервер для Windows


2-1252333617
Rembo
2009-09-07 18:26
2009.11.01
Многопоточный Indy (idHTTP)


15-1251828018
AlexDan
2009-09-01 22:00
2009.11.01
почему только один буфер обмена..?