文字列のマーシャリング、C ++からC#へ:「変換はライブラリでサポートされていません」

StackOverflow https://stackoverflow.com/questions/1645145

質問

概要:

マーシャリングを使用して文字列データをC#からC ++ DLLに渡そうとすると、取得します

  

'msclr :: interop :: error_reporting_helper <!> lt; _To_Type、_From_Type <!> gt; :: marshal_as':   この変換はサポートされていません   必要なライブラリまたはヘッダーファイル   この変換には含まれていません。   のドキュメントを参照してください   '方法:マーシャリングを拡張する   自分のライブラリを追加するためのライブラリ   マーシャリング方法。 c:\ program   files \ microsoft visual studio   9.0 \ vc \ include \ msclr \ marshal.h 203

Visual Studio 2008 Professional Editionを使用しています。 Visual 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のドキュメント(Stack Overflowは2番目のURLの引用を拒否しています)。ただし、C ++コンパイラが必要な変換を見つけられないことは明らかです。

私が見逃したことは何ですか?私は、C ++やWindowsの専門家ではないと認めています。

役に立ちましたか?

解決

ドキュメントには、定数文字列^が必要であると書かれていません。 constを削除します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top