Как маршалировать массив байтов из управляемого c ++ в c # - PullRequest
1 голос
/ 29 июня 2011

Я бы хотел использовать функциональность .Net Graphic из управляемого C ++ проекта.Я хотел бы создать Windows.Drawing.Image (на основе MemoryStream) из памяти байтов c ++ массива.

Как мне заставить этот кусок кода работать:

System::IO::Stream^ ms = gcnew System::IO::MemoryStream();
BYTE buf[1024 * 8];  // C++
int size;  // C++
...
ms->Write(&buf, 0, size) 

Заранее спасибо!

1 Ответ

1 голос
/ 29 июня 2011

Вы можете сделать это примерно так:

int size = 1024;

BYTE buf[1024];

// unmanaged buffer
System::IntPtr intPtr = System::IntPtr( buf );

// managed buffer 
array<unsigned char>^ managedBuf = gcnew array<unsigned char>(size);

{
    // write things to buf[]
}

// copy unmanaged buffer to managed buffer
Marshal::Copy( intPtr, managedBuf, 0, size );

System::IO::Stream^ ms = gcnew System::IO::MemoryStream();

ms->Write( managedBuf, 0, size);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...