Programming/C++/CLI

System::String -> char* OR wchar_t*

blueasa 2010. 5. 26. 20:35

이번절에서는 닷넷 프레임 워크의 System::String를 일반적으로 C++ 에서 사용할 수 있는 char* 또는 wchar_t* 로 변환 해보도록 해봅시다. 간단한 코드라서 전체 소스와 주석으로 설명을 대신 하겠습니다.

#pragma once


#include <vcclr.h>

#include <atlstr.h>

#include <stdio.h>

#using <mscorlib.dll>

using namespace System;

using namespace System::Runtime::InteropServices;


namespace MainEngine {


    public ref class MainRenderEngine

    {

        // TODO: Add your methods for this class here.

    public:

        bool Create(System::String^ strWindowText)

        {

            // 유니코드 문자열에 할당

            pin_ptr<const wchar_t> wch = PtrToStringChars(strWindowText);


            MessageBox(NULL, wch, _T("유니코드"), MB_OK);


            // 일반 char* 문자열로 변환

            size_t convertedChars = 0;

            size_t  sizeInBytes = ((strWindowText->Length + 1) * 2);

            errno_t err = 0;

            char    *ch = (char *)malloc(sizeInBytes);


            err = wcstombs_s(&convertedChars, ch, sizeInBytes, wch, sizeInBytes);


            if (err != 0)

            {

                MessageBox(NULL, _T("char* 변환 에러"), _T("에러"), MB_OK);

            }


            // ch의 사용

            printf_s("%s\n", ch);



            return true;

        }

    };

}



반응형