2012-03-22 66 views
0

我想用發送C#字符串列表到C++代碼C++/CLI:發送從C#字符串的列表,以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 2012-03-22 19:50:11

+0

檢查當前變種 – 2012-03-22 20:34:13

+0

偉大的職位!非常感謝 – olidev 2012-03-22 20:46:44

0

在定義託管數組時,你們都不能使用類。如果你正在尋找使用std :: string類,你可能最好使用類似std :: vector的東西。


PS:你怎麼沒做到?

using namespace std; 
+0

你是對的,我應該使用命名空間 – olidev 2012-03-22 19:48:55