Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Крнвертация AnsiString в wchar_t**, никак не выходит 
:(
    Опции темы
Teran
  Дата 13.11.2006, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 590
Регистрация: 9.9.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



на могу сконвертировать AnsiString в wchar_t**.
пробовал так но ничего не вышло:
Код

AnsiString p = "c:\\1.txt";
char *Str=new char[MAX_PATH];
Str=p.c_str();

  WCHAR *wStr=NULL;
  int nCountLit = MultiByteToWideChar(CP_ACP, 0, Str, -1, wStr, 0);
  wStr = new WCHAR[nCountLit];
  MultiByteToWideChar(CP_ACP,0, Str,-1, wStr,nCountLit);

 Recognize((wchar_t**)&wStr); // Собственно функция в которую надо передать wchar_t**  (BSTR* Filename)

Кто нибудь знает как это делается?


--------------------
Ни цего не понимаю
PM MAIL ICQ   Вверх
Partizan
Дата 13.11.2006, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 7
Всего: 67



насколько я помню.....перевод между char и wchar_t осуществляют функции AnsiToOem() и OemToAnsi()... В VS они есть точно....насколько я помню ето уже WinAPI функции, поэтому и из билдера мона их поюзать...


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
pandrew
Дата 13.11.2006, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.3.2006

Репутация: 3
Всего: 3



AnsiString  atxt("Help");
WideString wtxt(atxt);
BSTR txt=wtxt.c_bstr();  // wchar_t* и BSTR по сути одно и тоже
PM MAIL   Вверх
Vyacheslav
Дата 13.11.2006, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



см help TStringConverter



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Teran
Дата 13.11.2006, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 590
Регистрация: 9.9.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Цитата(pandrew @  13.11.2006,  12:55 Найти цитируемый пост)
BSTR txt=wtxt.c_bstr();  // wchar_t* и BSTR по сути одно и тоже 

вот а мне нужно еще из wchar_t* сделать wchar_t**


--------------------
Ни цего не понимаю
PM MAIL ICQ   Вверх
bel_nikita
Дата 13.11.2006, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: нет
Всего: 47



Цитата(Teran @ 13.11.2006,  11:09)
Код
Recognize((wchar_t**)&wStr); // Собственно функция в которую надо передать wchar_t**  (BSTR* Filename)

Сдается мне, будет достаточно: Recognize(&wStr);

Добавлено @ 13:04 
Цитата(Teran @ 13.11.2006,  12:01)
вот а мне нужно еще из wchar_t* сделать wchar_t**

для чего?


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Teran
Дата 13.11.2006, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 590
Регистрация: 9.9.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Код

String str = "A string here" ;
LPWSTR lpszW = new WCHAR[255];

LPTSTR lpStr = str.c_str();
int nLen = MultiByteToWideChar(CP_ACP, 0,lpStr, -1, NULL, NULL);
MultiByteToWideChar(CP_ACP, 0, lpStr, -1, lpszW, nLen);
Recognize(lpszW);//ОШИБКА ТУТ

вот именно в жтой строке вомпилятор выдает ошибку:
Код

[C++ Error] Unit1.cpp(55): E2034 Cannot convert 'wchar_t *' to 'wchar_t * *'



--------------------
Ни цего не понимаю
PM MAIL ICQ   Вверх
Partizan
Дата 13.11.2006, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 7
Всего: 67



добавляешь амперсанд ака & куда надо и всё будет ок 


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Teran
Дата 13.11.2006, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 590
Регистрация: 9.9.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Цитата(Partizan @  13.11.2006,  13:07 Найти цитируемый пост)
добавляешь амперсанд ака & куда надо и всё будет ок  

я вот тоже так думал а почемуто не работает но компилируется ок


--------------------
Ни цего не понимаю
PM MAIL ICQ   Вверх
Partizan
Дата 13.11.2006, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 7
Всего: 67



нутк ты передаёшь указатель на одномерный массив....а функция ждёт  двумерный массив....
желательно бы чтоб ты весь код привёл и ожидаемый результат сообщил) 

Это сообщение отредактировал(а) Partizan - 13.11.2006, 14:42


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
bel_nikita
Дата 13.11.2006, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: нет
Всего: 47



Цитата(Partizan @ 13.11.2006,  12:17)
нутк ты передаёшь указатель на одномерный массив....а функция ждёт указателя на двумерный....
желательно бы чтоб ты весь код привёл и ожидаемый результат сообщил)

На самом деле одномерный или многомерный массив неважно, разница в адресации и индексации в массиве. Тут ошибка в логике.
Метод Recognize принимает указатель на указатель, а это не есть классический массив вида int array[10][10], в котором элементы располагаются последовательно в памяти. В данном случае Recognize принимает массив указателей на одномерные массивы.
Т.е. Recognize - код в студию!

З.Ы.: надеюсь понятно объяснил smile 


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Teran
Дата 13.11.2006, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 590
Регистрация: 9.9.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Цитата(bel_nikita @  13.11.2006,  13:46 Найти цитируемый пост)
код в студию!

дело в том что кода нету это activX dll которую я подключаю
она стает как компонент

самое интересное что Builder С++ эта функция такая:
Код

  BSTR __fastcall Recognize(BSTR* strFilename/*[in,out]*/)
  {
    return GetDefaultInterface()->Recognize(strFilename/*[in,out]*/);
  }

а когда ставлу в Delphi то в место BSTR* strFilename ей нужно всеголиш WideString и в delphi он отрабатывает
но проблема в том что мне нужно на Buildere писать

наверно придется в буилдер добавлять .pas файл


--------------------
Ни цего не понимаю
PM MAIL ICQ   Вверх
pandrew
Дата 13.11.2006, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 27.3.2006

Репутация: 3
Всего: 3



Цитата(Teran @ 13.11.2006,  15:07)
наверно придется в буилдер добавлять .pas файл

На BCB потребуется что-нибудь вроде:
Код

Widestring str; // str надо как-нибудь инициализировать
Comp->Recognize(&str);

Это стандартный вызов для [in,out] строковых параметров
PM MAIL   Вверх
bel_nikita
Дата 13.11.2006, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: нет
Всего: 47



А подробнее о аргументах  GetDefaultInterface()->Recognize(strFilename/*[in,out]*/);
Может должно быть так:
Код
BSTR  MyBstr = SysAllocString(lpszW);
Recognize(MyBstr);



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Teran
Дата 13.11.2006, 21:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 590
Регистрация: 9.9.2005
Где: Украина, Запорожь е

Репутация: нет
Всего: 3



Всем спасибо за участие 
кто с таким столкнется решил проблему так:
Код

 AnsiString FName="Test1";
 LPWSTR lpszW = new WCHAR[255];
 int nLen = MultiByteToWideChar(CP_ACP, 0,FName.c_str(), -1, NULL, NULL);
 MultiByteToWideChar(CP_ACP, 0, FName.c_str(), -1, lpszW, nLen);
 BSTR Param1 = lpszW;
  Recognize((BSTR*)&Param1);
 delete []lpszW;



--------------------
Ни цего не понимаю
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0826 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.