Как эффективно передать unsigned char * в управляемый метод в C ++ / CLI? - PullRequest
1 голос
/ 18 апреля 2019

Рассмотрим следующий управляемый класс:

public ref class DataProvider
{
  public: 
    static int ReadData(void* handlePtr, unsigned char* buffer, int cnt)
    {
      if (handlePtr == nullptr)
      {
        return -1;
      }

      GCHandle handle = GCHandle::FromIntPtr(IntPtr::IntPtr(handlePtr));
      System::IO::Stream^ _stream = dynamic_cast<System::IO::Stream^>(handle.Target);
      if (_stream == nullptr)
      {
        return -1;
      }

      array<unsigned char>^ data = gcnew array<unsigned char>(cnt);
      pin_ptr<unsigned char> dataPtr = &data[0];
      int read = stream->Read(data, 0, cnt);
      if (read > 0)
      {
        memcpy(buffer, dataPtr, cnt);
      }
      return read;
    }
}

ReadData метод вызывается посредством обратного вызова из неуправляемого кода.Это работает, но выделяет временный буфер data.Это выглядит чрезмерно.

Вопрос : Можно ли передать оригинальный buffer в stream->Read метод и устранить выделение этого дополнительного data буфера?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...