Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/91: Рейтинг темы: голосов - 91, средняя оценка - 4.51
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1

WideString и префикс L перед строкой символов?

06.09.2012, 18:34. Показов 19422. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я правильно понимаю, WideString ("abc") это - тоже самое, что L"abc" ?

Говорим про Windows, не MAC OS.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.09.2012, 18:34
Ответы с готовыми решениями:

Префикс L перед текстовой строкой
Подскажите пожалуйста что означает буква L перед строкой ,и есть ли другие и как это правильно называется ? F.e: const...

Перед каждой строкой текстового файла вставить номер строки и количество символов в этой строке
Перед каждой строкой текстового файла вставить номер строки и количество символов в этой строке

Разбить содержимое текстового файла на строки длиной 20 символов (и добавить перед каждой строкой ее номер)
Перезаписать содержание файла f в файл h, так, чтобы в файле h все строки были по 20 символов (кроме последней) и в начале каждой строки...

13
Я Фоюмчанин ? дааааа)
 Аватар для ivan.-94
213 / 204 / 23
Регистрация: 02.06.2012
Сообщений: 1,424
Записей в блоге: 12
06.09.2012, 19:32
Компилятор по дефолту "***" считает как WideString, а L обозночает AnsiString.
Можно не париться визде с L и просто в Project->options->Directories and Conditionals->_TCHAR map to установить в char
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
06.09.2012, 20:07
Цитата Сообщение от ivan.-94 Посмотреть сообщение
Компилятор по дефолту "***" считает как WideString, а L обозночает AnsiString.
Наоборот. Считай, что L - это Long (мнемоническое правило, так проще запомнить), строка, состоящая из wchar_t.
1
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
06.09.2012, 22:20  [ТС]
Тогда поясните мне, почему в следующем коде происходит зависание программы при использовании 'L', и отлично работает при использовании WideString

Рабочий код
C++
1
 my_worksheet=my_workbook.OlePropertyGet("WorkSheets",WideString("SheetName"));
проблемный
C++
1
 my_worksheet=my_workbook.OlePropertyGet("WorkSheets",L"SheetName");
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
06.09.2012, 23:02
Лучший ответ Сообщение было отмечено volvo как решение

Решение

Потому что в первом случае ты явно указал, что в OlePropertyGet должна передаваться строка, приведенная к типу WideString, который прекрасно совместим с BSTR, используемым в OLE, а во втором L"SheetName" создает UnicodeString, преобразовывать который в BSTR компилятор не умеет. Отсюда и зависания, и сбои, и "Type mismatch".

Раз работаешь с OLE - будь добр использовать то. что он понимает. То есть, либо собственно BSTR, либо WideString.
3
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
07.09.2012, 11:40  [ТС]
Запутался я в этих строках. Хочу чётко разобраться со строками и переходом на XE2 при использовании VCL и Windows API. Помогите, пожалуйста корректно перенести проект в XE2.

Как корректно мигрировать на XE2 учитывая, что строки по умолчанию в XE2 уже WideString ?

1) Какие глобальные изменения внести в проект? ( типа заменить WinMain на _tWinMain )
2) Где чего прописать чтобы поменьше конвертировать строки?
3) Какие функции использовать для работы со строками ? ( типа пользовать _tcscpy вместо strcpy )
Пример "из прошлой жизни" до XE2:
C++
1
strcat (tmp, AnsiString(Clients->FieldByName("ClientName")->AsString).c_str());
Как нынче это лучше записать ?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
07.09.2012, 11:59
Цитата Сообщение от Kabak Посмотреть сообщение
строки по умолчанию в XE2 уже WideString ?
Неправда. Строки по умолчанию - UnicodeString, а не WideString:
Note: The default string type is UnicodeString. WideString is provided to be compatible with the COM BSTR type. You should generally use UnicodeString for non-COM applications; for most purposes UnicodeString is the preferred type.
Цитата Сообщение от Kabak Посмотреть сообщение
Как нынче это лучше записать ?
Что такое у тебя tmp в данном случае?
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
07.09.2012, 14:11  [ТС]
char * tmp

Суть в том, про проект был сперва написан в С++ Builder 6. Проект формирует отчёт из MySQL бызы в WinWord и Exсel. Собственно, куча строк и с ними нужно как-то быстро управляться,- т.е. копирование, объединение в одну большую, передача строк в Excel или Word и т.д.

Сейчас хочу переписать всё под XE2 и соответственно оптимизировать для шустрой работы.

Добавлено через 1 час 32 минуты
Установил Project->options->Directories and Conditionals->_TCHAR map to wchar_t

и исправил WinMain на _tWinMain

Проект не линкуется c сообщением :
[ILINK32 Error] Error: Unresolved external 'wWinMain' referenced from C:\PROGRAM FILES\EMBARCADERO\RAD STUDIO\9.0\LIB\WIN32\RELEASE\C0W32W.OBJ
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
07.09.2012, 15:44
Тип третьего параметра WinMain поменял?

C++
1
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) // на LPTSTR
?
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
07.09.2012, 15:54  [ТС]
Не поменял... сейчас поменял, но та же ошибка линковки.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
07.09.2012, 16:00
А, ну конечно

C++
1
2
3
#include <vcl.h>
#pragma hdrstop
#include <tchar.h> // Вот это тоже надо добавить. Причем в каждый файл.
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
07.09.2012, 16:12  [ТС]
Не спасает... та же ошибка линковки.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
07.09.2012, 17:47
Лучший ответ Сообщение было отмечено volvo как решение

Решение

А вот теперь - не верю. Больше ничего быть не должно. Показывай свой Project.cpp... Вот с таким файлом проект прекрасно собирается.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <vcl.h>
#pragma hdrstop
#include <tchar.h> // Без этого - нет
 
USEFORM("Unit1.cpp", Form1);
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int) // С LPSTR - нет
{
    try
    {
        Application->Initialize();
        Application->MainFormOnTaskBar = true;
        Application->CreateForm(__classid(TForm1), &Form1);
        Application->Run();
    }
    catch (Exception &exception)
    {
        Application->ShowException(&exception);
    }
    catch (...)
    {
        try
        {
            throw Exception("");
        }
        catch (Exception &exception)
        {
            Application->ShowException(&exception);
        }
    }
    return 0;
}
1
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
07.09.2012, 17:58  [ТС]
Я очень извиняюсь, что дурил голову... именно в файле проекта и забыл указать. Во всех остальных указал.
C++
1
#include <tchar.h> // Без этого - нет
Всё откомпилировалось и слинковалось.


Стоит ли теперь все AnsiString менять на UnicodeString ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.09.2012, 17:58
Помогаю со студенческими работами здесь

Cpp builder-Ole-Excel. WideString пишет в ячейку Excel минус перед нулем
Здравствуйте! Посмотрите пожалуйста: Когда аргумент val == 0, в ячейку Excel пишется &quot;-0&quot;. Без WideString все нормально - в...

Передаю адрес строки в процедуру для вывода - перед строкой печатает мусор
Вот так компилирую set filename=%1 TASM.EXE %filename%.asm TLINK.EXE /t/x %filename%.obj А вот сам код. Мусор появляется...

Вставка Enter перед строкой
Добрый день! Проблема вот в чем: Имеется многострочный txt. Нужно: чтобы перед каждой строкой, в которой есть слово &quot;asdf&quot;...

Что означает L и _T перед строкой?
Здравствуйте,подскажите пожалусто что означает L и _T перед строками,и вообще какие другие приставки бывают,если их так можно...

Префиксы L и u перед строкой в кавычках
Предположим есть две строки: UnicodeString Str1 = L&quot;Привет, Мир!&quot;; wchar_t Str2; wcsncpy(Str2, Str1 .c_str(), 6); Если смотреть в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru