Я пытаюсь вызвать событие в 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
На этот раз у меня проблема с получением данных, мой объект в моем событии выглядит как простой указатель ... Я понятия не имею, что делать счто.
Я действительно хотел бы знать, как заставить указатель функции и сортировку работать для Списка, но любой другой способ заставить это работать, является приемлемым.Спасибо за вашу помощь!