Преобразование String ^ в c # в CString в c ++ / CLI

Мне нужна помощь по одному вопросу, в котором я застрял при написании приложения на MFC.

Я использую CLR, то есть Common Language Runtime в своем приложении для интеграции API C #. но теперь я застрял на преобразовании System::String^ в CString. Я не могу этого сделать.

Я использую следующий код.

String^ csPass = gcnew String(strPassword.GetBuffer());
array<Byte>^ Value = Encoding::UTF8->GetBytes(csPass);
for (int i = 0; i < Value->Length; i++ )
{
csPass += String::Format( "{0:X2}", Value[ i ] );
}

теперь я хочу преобразовать csPass в CString. Может ли кто-нибудь помочь мне в этом. Заранее спасибо.


person A B    schedule 11.01.2014    source источник


Ответы (2)


Рассмотрите возможность чтения этой ветки MSDN о преобразовании строк. Также вам могут быть полезны следующие обсуждения:

Из этого материала вы сможете узнать, как это сделать, и даже опубликовать собственное решение в качестве ответа.

person Ilya Tereschuk    schedule 11.01.2014

Получил свой ответ. Спасибо за поддержку, @Elliot Tereschuk.

Я просмотрел несколько ссылок, например

  1. Как: расширить библиотеку маршалинга
  2. Обзор маршалинга в C ++
  3. Для CString.Format ()

и

включить файлы заголовков

#include <msclr/marshal_windows.h>
#include <msclr/marshal.h>

с использованием библиотеки using namespace msclr::interop;

И, наконец, мой исходный код.

String^ csPass = gcnew String(strPassword.GetBuffer());
array<Byte>^ Value = Encoding::UTF8->GetBytes(csPass);
for (int i = 0; i < Value->Length; i++ )
{
csPass += String::Format( "{0:X2}", Value[ i ] );
}

marshal_context^ context = gcnew marshal_context();

const char* str = context->marshal_as<const char*>(csPass);

csMyPass.Format(str);

csMypass - это переменная типа CString. Спасибо за поддержку.

person A B    schedule 11.01.2014
comment
Я скопировал ваши коды в свой проект, но компилятор сообщает, что он не может распознать этот класс: Encoding :: UTF8- ›GetBytes (csPass), знаете почему? Спасибо! - person sunjinbo; 24.03.2016
comment
@sunjinbo вы добавили файлы заголовков в свой код. или обратитесь к http://stackoverflow.com/questions/6596242/net-systemstring-to-utf8-bytes-stored-in-char - person A B; 06.04.2016
comment
#include ‹msclr / marshal_windows.h› не требуется для моей среды. Я немного изменил код: auto context = gcnew marshal_context (); auto msgChars = context- ›marshal_as‹ const wchar_t * ›(csPass); CString csMyPass (msgChars); - person HMartyrossian; 03.05.2019