文字列のマーシャリング、C ++からC#へ:「変換はライブラリでサポートされていません」
-
10-07-2019 - |
質問
概要:
マーシャリングを使用して文字列データを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を削除します。
所属していません StackOverflow