2017-03-26 7 views
0

C#コードにC++ std::vector<std::string>をどのように返すのですか? 私のメソッド宣言(C++側)は、現在のように見える:C#コードにマーカルC++文字列ベクトル

__declspec(dllexport) std::vector<std::string> __cdecl Initialize(std::vector<std::string> array = {}) 

しかし、私はvectorまたはどのようにC++に送信するを取得する方法については考えています。

ご協力いただきまして誠にありがとうございます。

+1

C#へのC++コレクションのマーシャリングはありません。 C++/CLIを使うか、 'vector <>'を他のものに変更してください。 – xanatos

+0

@ xanatosあなたの答えはありがたいです。だから、C#からC++に、あるいはその逆に交換できるBasic型だけですね。 –

+1

@ThFI基本型、Cスタイルの配列、Cスタイルの文字列(char *、wchar_t *)、これらのもので構成される構造体、ポインタ。 – xanatos

答えて

2

文字列のvectorをマーシャリングすることは自明ではありません。

C++とCLIを使用してC++とC#の間にブリッジングレイヤーを構築することを検討することができます。

C++/CLIを使用しない場合は、有効な代替方法はSAFEARRAYです。 ATL::CComSafeArrayを使用すると、C++での安全な配列プログラミングを簡素化できます。

this article on safe arrays on MSDN Magazineが役に立ちます。

また、文字列エンコーディングにも注意する必要があります。あなたにstd::stringのUTF-8を使用する場合は、SAFEARRAY(BSTR)または.NET StringクラスのUTF-16に変換する必要があります。

+0

あなたの答えは本当にありがとう、私はそれが私のために働くかどうかをチェックするつもりです。複数の方法を提案していただきありがとうございます:) –

+0

@ThFlよろしくお願いします。 –