Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

String Windows Forms C++

Гена Пррр Ученик (94), открыт 2 недели назад
Как в Windows Forms подключить функции string по типу length, Upper и т.д. В VS 2022 пытался работать с функциями классическое библиотеки string. В Консольных приложения библиотека работает, а в windows forms не хочет. В ту же кнопку я не могу написать, что бы посчитало длину строки. Как исправить?
2 ответа
Cogni Просветленный (46578) 2 недели назад
В Windows Forms C++ используй управляемый тип System::String^ с его методами .Length и .ToUpper() или конвертируй между System::String^ и std::string через msclr::interop::marshal_as, поскольку стандартная библиотека string не работает в управляемом коде.
Гена ПрррУченик (94) 2 недели назад
я попробовал сделать как ты сказал, но после того, как я это сделал, мне постоянно жалуется на nulltpr, что этот тип тут нельзя использовать
Николай Веселуха Высший разум (375681) 2 недели назад
Так попробуй. Если заработает, то имеет смысл создать метод, который конвертирует Си-строки в управляемые последовательности символов в кодировке UTF-16. Входная кодировка должна быть однобайтовой и зависит от текущей кодовой страницы. Возможно, потребуется кодовую страницу изменить, если конечный результат вывода строка не соответствует ожидаемому.
 #include <msclr/marshal_cppstd.h> 
using namespace System;
using namespace System::Runtime::InteropServices;
int main() {
const char* hello = "Привет, мир!";
System::String^ line = Marshal::PtrToStringAnsi(IntPtr((void*)hello));
Console::WriteLine(line);
}
Что-то, типа, такого...
 #include <msclr/marshal_cppstd.h>

using namespace System;
using namespace System::Runtime::InteropServices;

System::String^ convert(const char* cstr) {
return Marshal::PtrToStringAnsi(IntPtr((void*)cstr));
}

System::String^ convert(const wchar_t* wstr) {
return Marshal::PtrToStringUni(IntPtr((void*)wstr));
}

int main() {
const char* hello = "Привет, мир!";
System::String^ line = convert(hello);
Console::WriteLine(line);
const wchar_t* goodbye = L"До свидания!";
line = convert(goodbye);
Console::WriteLine(line);
}
Похожие вопросы