отправка списка строк из C # в C ++ вызывает ошибки - PullRequest
0 голосов
/ 22 марта 2012

Я хочу отправить C # список строк в код C ++, используя C ++ / CLI:

в C ++, я поместил это в конструктор:

#include <string>

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

Но я получил этоошибка компиляции:

ошибка C2691: 'std :: string': управляемый массив не может иметь этот тип элемента

И в реализации у меня есть:

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 ]

2 голосов
/ 22 марта 2012
#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 голосов
/ 22 марта 2012

Вы не можете использовать классы при определении управляемого массива.Если вы хотите использовать класс std :: string, вам, вероятно, лучше всего использовать что-то вроде std :: vector.


PS: Почему вы этого не делаете?

using namespace std;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...