Преобразовать массив данных <Byte>^ в байты * данные - C ++ / CLR - PullRequest
0 голосов
/ 03 февраля 2010

Я пытаюсь вызвать функцию в C из C #, хотя c ++

так в основном C # -> C ++ -> C

В C # у меня есть байты [] байтов - которые считывают информацию из файла. Я передаю байтовый массив и размер в C ++.

В C ++ я получаю байтовый массив и размер, но я не могу преобразовать в определенные типы данных.

void Image::OpenMemFile(array<Byte>^ data, unsigned int size)
{

    Free();
    m_dataStream = data;
    Byte const* streamData = &data[0];   // this is where it throws error 
         // Should I use marshaling here ? What call should that ;be ?
         hImage = ::OpenMemImage(streamData ,&nbsp;size);
    modified = false;
}

// this is the function I&nbsp;need to call 
EXIVSIMPLE_API HIMAGE OpenMemImage(const&nbsp;BYTE *data, unsigned int size)
{
   // code
        imgWrap->image = Exiv2::ImageFactory::open(data, size);

}

функция C, которую нужно вызвать, это

Image::AutoPtr ImageFactory::open(const byte* data, long size)
    {
      /// code
    }

Мне нужно помочь в преобразовании байтового массива в константный байт *. Я понимаю, что мне нужно использовать Marshaling. Есть ли конкретная функция для маршальных массивов в C ++?

Любая помощь приветствуется.

Спасибо

1 Ответ

1 голос
/ 19 октября 2010
pin_ptr<unsigned char> pin_buffer = &data[0];
unsigned char* pData = pin_buffer;
...