Как вызвать событие C # из уведомления C ++ с аргументом vector <double> - PullRequest
0 голосов
/ 04 февраля 2019

Я пытаюсь вызвать событие в C # из уведомления в C ++ с некоторыми векторными данными, но я не могу "преобразовать" его в

В моем проекте C ++ / CLI я обертываюпроект C ++, который генерирует некоторое уведомление с некоторыми векторными данными.Я пытаюсь упорядочить его, чтобы отправить его в событие C #, но получаю странную ошибку, основанную на поврежденных данных.У меня есть некоторый код, работающий для установления связи между уведомлением и событием, но он не работает с вектором <>.

Это уведомление, сгенерированное из библиотеки C ++:

    notify(EvtScopeUpdate*)

Этот EvtScopeUpdate в основном является вектором:

    struct EvtScopeUpdate {
        std::vector<double> data{ std::vector<double>() };
    };

Это событие, которое я пытаюсь запустить в сторону C #:

    public delegate void CLRScopeUpdateDelegate(Collections::Generic::List<double>^ scope);

И это то, как я делаюсвязь между ними:

    CLRScopeUpdateDelegate^ scopeUpdateprDel = gcnew CLRScopeUpdateDelegate(this, &H2iAudioWrapper::raiseScopeChangedEvent);
    gch = GCHandle::Alloc(scopeUpdateprDel);
    ip = Marshal::GetFunctionPointerForDelegate(scopeUpdateprDel);
    ScopeUpdateDelegate scopeUpdateFunctionPointer = static_cast<ScopeUpdateDelegate>(ip.ToPointer());
    obs->set_scopeUpdate_delegate(scopeUpdateFunctionPointer);

Когда связь установлена, в уведомлении я звоню

    stateUpdateDel(evt->newState);

Теперь у меня появляется ошибка «Невозможно выполнить маршалинг универсальных типов».Я попытался изменить на следующий тип массива ^ scope

На этот раз у меня проблема с получением данных, мой объект в моем событии выглядит как простой указатель ... Я понятия не имею, что делать счто.

Я действительно хотел бы знать, как заставить указатель функции и сортировку работать для Списка, но любой другой способ заставить это работать, является приемлемым.Спасибо за вашу помощь!

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