Molniev
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору vlary Нет, это зверь страшней: Managed C++/CLI. Такая штука в которой есть и си с плюсами и .net разом. Shandera Код: String^ z; z = textBox1 -> Text; System::IntPtr szMessage = System::Runtime::InteropServices::Marshal::StringToHGlobalUni(z); WritePrivateProfileStringW(L"MySection", L"Name_autor", (wchar_t*)szMessage.ToPointer(), L"C:\\my.ini"); System::Runtime::InteropServices::Marshal::FreeHGlobal(szMessage); | 1. Может все таки прекратити издеваться сами над собой и воспользуетесь С#? Упорство оно конечно неплохо, но Managed C++/CLI он вообщето не для такой чехарды, что вы творите, а для совмешения программных модулей dotNet-а и С++. Если пишите новую программу - используйте C#. Или C++ без всех этих прибабахов, с HTMLayout для интерфейса. 2. Заметьте никаких TEXT() - это старая хрень для совместимости с старым кодом. Используйте функции с префиксом W, wchar_t вместо char, L"" вместо TEXT(), wcslen вместо strlen. В дотнете unicicode строки и современные программы должны работать с unicode. Вы сохраните себе кучу нервов прислушившись к совету. 3. Мир не без добрых ответов. stackoverflow.com - там куча тем где отвечают на ваш вопрос. Типа C++/CLI Converting from System::String^ to std::string или System::String to QString. На английском разумеется. Но С++ он тоже "на английском". 4. System::Runtime::InteropServices::Marshal::StringToHGlobalUni && System::Runtime::InteropServices::Marshal::FreeHGlobal. Не забывайте делать второй вызов, как попользуетесь wchar_t строкой. Иначе память будет течь как слезы безбожников в судный день. 5. Хочеться заметить, что то что вы сейчас пытаетесь делать в некоторых случаях могут посчитать программным кодом не очень высокого качества. Пожалуста! Прочтите пару тройку хороших книг по C# и C++. Это существенно облегчит ваши страдания связанные с подобными вопросами. И время сэкономите. 6. Цитата: Следующий способ не срабатывает: | С чего бы кстати работать? TEXT - жаждет даже не массива char или wchar_t а строкового литерала! Поясняю, строковый литерал, это то что в двойных кавычках. потому как TEXT это макрос, добавляющий префикс L к UNICODE строкам. Так: TEXT("текст") - можно. TEXT("текст") --> L"текст" А так: char z[] = "текст"; TEXT(z) - нельзя. TEXT(z) --> Lz А WritePrivateProfileString третьим параметром жаждет указателя на массив символов. z - это не массив символов.Это объект! Класса String. Типы данных как бы немножко разные. | Всего записей: 176 | Зарегистр. 13-03-2008 | Отправлено: 16:25 20-08-2011 | Исправлено: Molniev, 18:29 20-08-2011 |
|