문제

요약:

마샬링을 사용하여 문자열 데이터를 C#의 C ++ DLL로 전달하려고 할 때

'msclr :: interop :: error_reporting_helper <_to_type, _from_type> :: Marshal_as':이 변환은 라이브러리에서 지원되지 않거나이 변환에 필요한 헤더 파일에는 포함되지 않습니다. 자신의 마샬링 방법을 추가하려면 '방법 : 마샬링 라이브러리 확장'에 대한 문서를 참조하십시오. C : Program Files Microsoft Visual Studio 9.0 VC 포함 MSCLR Marshal.h 203

Visual Studio 2008 Professional Edition을 사용하고 있습니다. 시각적 C ++ 2008; .NET 3.5.

세부 사항:

(가장 간단한 형태) 관련 방법은 다음과 같습니다.

LibDSSDLL::DssOutputSocketFacade::DssOutputSocketFacade(const System::String^ name)
{
    marshal_context^ context = gcnew marshal_context();
    std::string n = context->marshal_as<std::string>(name);

    this->socket = new DssOutputSocket( n);
}

헤더는 사전 처리기에 제시되는 순서대로 포함됩니다.

#include "StdAfx.h"
#include <string>
#include <iostream>
#include <msclr\marshal_cppstd.h>

#using <mscorlib.dll>
using namespace System;
using namespace msclr::interop;

이것은 마치 인용 된 예를 준수하는 것처럼 보입니다. 여기 그리고 MSDN의 문서에 (스택 오버플로가 두 번째 URL을 인용하지 않기를 거부하고 있습니다); 그러나 C ++ 컴파일러는 분명히 필요한 변환을 찾지 못합니다.

내가 무엇을 놓쳤습니까? 나는 C ++ 또는 Windows에 대해 전문가가 아니라고 고백합니다.

도움이 되었습니까?

해결책

문서는 그것이 필요하다고 말하지 않습니다 Const 문자열^. Const를 제거하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top