2012-03-22 8 views
0

原因++のC#からCに文字列のリストを送信:C++では、私はC++/CLIを使用してC++コードに文字列のC#リスト送信するエラー

を、私は、コンストラクタでこれを置く:

#include <string> 

public: 
    MyAlgorithm(array<std::string>^ listAlgorithms); 

しかし、私は、このコンパイルエラーました:

error C2691: 'std::string' : a managed array cannot have this element type

をと実装に私が持っている:

MyAlgorithm(array<std::string>^ listAlgorithms) 
{ 
    pin_ptr<std::string> algorithms = &listAlgorithms[0]; 
    std::string* unmanagedAlgorithms = algorithms; 
} 

そして、私はこのエラーを得た:

error C2440: 'initializing' : cannot convert from 'cli::interior_ptr<Type>' to 'cli::pin_ptr<Type>' 

私は彼らはどのように修正する必要がありますか?

ありがとうございます。

答えて

2
#include <string> 

#include <msclr/marshal_cppstd.h> 


MyAlgorithm(array<String^>^ listAlgorithms) 
{ 
    std::vector<std::string> unmanagedAlgorithms(listAlgorithms->Length); 
    for (int i = 0; i < listAlgorithms->Length; ++i) 
    { 
     auto s = listAlgorithms[i]; 
     unmanagedAlgorithms[i] = msclr::interop::marshal_as<std::string>(s); 
    } 

} 

または

std::vector<std::string> unmanagedAlgorithms; 
    for each (auto algorithm in listAlgorithms) 
    { 
     unmanagedAlgorithms.push_back(msclr::interop::marshal_as<std::string>(algorithm)); 
    } 

または最初の文字列だけ

String^ managedAlgorithm = listAlgorithms[0]; 
    std::string unmanagedAlgorithm = msclr::interop::marshal_as<std::string>(managedAlgorithm); 
+0

を使用する必要があります。私はC++プログラマーではない。あなたのコードについて聞かれるかもしれません。 unmanagedAlgorithmは配列の最初の要素だけを取得しますか?私はunmangedAlgorithmのすべての要素を持っています。どうやってやるの。おそらく、私は私のオリジナルの実装に間違っていました。ありがとう – olidev

+0

現在の変種をチェック –

+0

素晴らしい投稿!どうもありがとう – olidev

0

管理対象配列を定義するときには、クラスを使用できません。 std :: stringクラスを使用する場合は、おそらくstd :: vectorのようなものを使うのがベストでしょう。


PS:どうしますか?

using namespace std; 
+0

あなたは正しいです、私はこれは良く見える名前空間 – olidev

関連する問題