2017-07-19 17 views
1

C#アプリケーションから受け取っているString ^の配列を変換する際に問題が発生しました。なぜString ^の配列を作成できないのですか? 私はC++をかなり新しくしているので、どんな助けもありがとうございます。ハンドルの配列は許可されていません。C++

public ref class Example 
    { 
     public: 
      String^ Convert(String^ pointNames[], String^ outputPath) 
      { 

       std::string convertedPath = msclr::interop::marshal_as<std::string>(outputPath); 
       std::string result = otherFunction(pointNames, convertedPath); 

       return msclr::interop::marshal_as<String^>(result); 
      } 
    }; 

pointsNames []にはエラーとして下線が表示されます。ハンドルの配列は許可されていません。

C#アプリケーションからC++に文字列の配列を送る方が良いでしょうか?

+0

「String^pointNames []」を 'WriteOnlyArray ^pointNames'に変更することをお勧めします。 – Thebluefish

+0

@Thebluefish私はストリング^をWriteOnlyArray ^に置き換えました^しかし、コンパイラはWriteOnlyArrayがテンプレートではないと言っていますが、ライブラリをいくつか含める必要がありますか? –

+0

これは 'Platform'名前空間に属しているようです - [この投稿](https://social.msdn.microsoft.com/Forums/en-US/f0e968b2-5798-430a-8a00-d45c4a9ef1e0/pointer- to-ac-array-of-hat-handles?forum = winappswithnativecode)を参照してください。 – Thebluefish

答えて

1

管理対象外の配列型を宣言しようとしましたが、管理対象型を保持するには管理対象の配列が必要です。

array<String^>^ pointNamesと宣言してください。

注:これはないstd::array、それはcli::arrayだが、その後/clrusing namespace cli;でコンパイルするとき暗示さです。

+0

どのようにして文字列[]にcli :: arrayを作成できますか? –

+0

これは 'marshal_as'のような組み込みメソッドがありません。ループを作成して各文字列を1つずつ変換するだけです。 –

関連する問題