C++ 마샬링 개요
혼합된 모드에서, 때때로 네이티브 및 관리 되는 형식 간에 데이터를 마샬링 해야합니다. Visual Studio 2008 은 간단한 방법으로 데이터를 변환하고 마샬링 하는 데 도움을 줄 마샬링 라이브러리를 도입합니다.
marshal_context 클래스의 여부와 관계없이 마샬링 라이브러리를 사용할 수 있습니다. 일부 변환은 컨텍스트가 필요 합니다. marshal_as 함수를 사용하여 다른 변환을 구현할 수 있습니다. 다음 표는 컨텍스트 필요 여부와 어떤 마샬 파일을 포함해야 하는 지, 그리고 현재 지원되는 변환을 나타냅니다.
형식으로부터 |
<대상 형식> |
Marshal 메서드 |
파일 포함하기 |
---|---|---|---|
System::String^ |
const char * |
marshal_context |
marshal.h |
const char * |
System::String^ |
marshal_as |
marshal.h |
char* |
System::String^ |
marshal_as |
marshal.h |
System::String^ |
const wchar_t* |
marshal_context |
marshal.h |
const wchar_t * |
System::String^ |
marshal_as |
marshal.h |
wchar_t* |
System::String^ |
marshal_as |
marshal.h |
System::IntPtr |
HANDLE |
marshal_as |
windows.h를 마샬링하다 |
HANDLE |
System::IntPtr |
marshal_as |
windows.h를 마샬링하다 |
System::String^ |
BSTR |
marshal_context |
windows.h를 마샬링하다 |
BSTR |
System::String^ |
marshal_as |
marshal.h |
System::String^ |
bstr_t |
marshal_as |
windows.h를 마샬링하다 |
bstr_t |
System::String^ |
marshal_as |
windows.h를 마샬링하다 |
System::String^ |
std::string |
marshal_as |
cppstd.h를 마샬링하다 |
std::string |
System::String^ |
marshal_as |
cppstd.h를 마샬링하다 |
System::String^ |
std::wstring |
marshal_as |
cppstd.h를 마샬링하다 |
std::wstring |
System::String^ |
marshal_as |
cppstd.h를 마샬링하다 |
System::String^ |
CStringT<문자> |
marshal_as |
atl.h를 마샬링하다 |
CStringT<문자> |
System::String^ |
marshal_as |
atl.h를 마샬링하다 |
System::String^ |
CStringT<wchar_t> |
marshal_as |
atl.h를 마샬링하다 |
CStringT<wchar_t> |
System::String^ |
marshal_as |
atl.h를 마샬링하다 |
System::String^ |
CComBSTR |
marshal_as |
atl.h를 마샬링하다 |
CComBSTR |
System::String^ |
marshal_as |
atl.h를 마샬링하다 |
마샬링은 관리되는 것에서 부터 네이티브 데이터 형식까지 마샬링할 때 오직 컨텍스트만 요구하고 변환 하고 있는 네이티브 형식은 자동 소멸을 위한 소멸자를 가질 필요가 없습니다. 마샬링 컨텍스트는 소멸자에서 할당된 원시 데이터 형식을 삭제합니다. 따라서, 컨텍스트가 삭제 될 때까지 컨텍스트가 필요한 변환은 유효 하지 않습니다. 마샬링된 값을 저장 하려면 변수에 직접 값 복사 해야 합니다.
참고
NULLs 이 문자열에 내장되어 있다면, 문자열을 마샬링 한 결과를 보장할 수 없습니다.포함된 NULLs은 문자열을 자르게 하거나 또는 그대로 유지하게 할 수 있습니다.
마샬링 라이브러리 헤더는 msclr 하위 디렉터리에 있습니다. 이 예제에서는 포함 헤더 선언에 msclr 디렉터리를 포함하는 방법을 보여 줍니다.
#include "msclr\marshal_cppstd.h"
마샬링 라이브러리는 마샬링 형식을 추가할 수 있도록 확장이 가능 합니다. 마샬링 라이브러리를 확장하는 것에 대한 자세한 내용은 방법: 마샬링 라이브러리 확장를 참조하십시오.
이전 버전에서, 플랫폼 호출을 사용하여 데이터를 마샬링 할 수 있습니다. PInvoke에 대한 자세한 내용은 관리 코드에서 네이티브 함수 호출을 참조하십시오.