У меня есть Blah.cs:
public unsafe static int Main()
{
int[] ai = {1, 2, 3, 4, 5};
UIntPtr stai = (UIntPtr) ai.Length;
CManagedStuff obj = new CManagedStuff();
obj.DoSomething(ai, stai);
}
Тогда ManagedStuff.cpp:
void CManagedStuff::DoSomething(int^ _ai, UIntPtr _stai)
{
// Here I should do something to marshal the int^ to an int*
pUnmanagedStuff->DoSomething(_ai, (size_t) _stai);
}
И UnmanagedStuff.cpp:
void CUnmanagedStuff::DoSomething(int* _ai, size_t _stai)
{
// Walk and print the _stai ints in _ai
}
Как я могу передать int[] ai
из Main в ManagedStuff :: DoSomething? Я понимаю, что в этом вызове нет маршалинга, потому что весь код управляется.
А как мне тогда маршала int^ _ai
в ManagedStuff :: DoSomething для вызова UnmanagedStuff :: DoSomething? Если бы у меня был int[] _ai
, то код в ответе на этот вопрос SO может помочь ( C #: выделение «указателя на массив int» из SendMessage () lParam ).
В качестве альтернативы, как мне избежать работы с C #, взаимодействием C ++, Microsoft и Windows и остановить страдания мира?