После публикации вопроса вчера я подумал, что это прояснилось, но у меня все еще есть проблемы, у меня есть оболочка C ++ / CLI для класса C ++, некоторые функции класса C ++ принимают в качестве параметров буферы для recv, пакетструктуры определяются как структуры C ++, и это то, что принимается в качестве параметра.
В C # я реплицировал эти структуры C ++, используя structlayout, так что у меня есть эквивалентные структуры в C #, которые расположены в памяти так же, как и мои структуры C ++.В своем коде C ++ / CLI я попытался сделать следующее:
UINT GetValues(value class^ JPVals) // value class, as C# structs are value types
{
IntPtr ptr;
Marshal::StructureToPtr(JPVals,ptr,false);
return m_pComms->GetValues(ptr,0); // m_pComms is a wrapped unmanaged class
//GetValues takes a pointer to a C++ struct
}
Ошибка, которую я получаю, не может преобразовать параметр 1 из 'System :: IntPtr' в 'SJPVal *', поэтому Маршалл из значения невозможноуказатель на класс C ++ struct?И в этом случае, что я должен передать и как я должен упорядочить это?