Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在C+中将无符号字符*传递给托管方法+/CLI是否有效?_Arrays_.net_C++ Cli - Fatal编程技术网

Arrays 如何在C+中将无符号字符*传递给托管方法+/CLI是否有效?

Arrays 如何在C+中将无符号字符*传递给托管方法+/CLI是否有效?,arrays,.net,c++-cli,Arrays,.net,C++ Cli,考虑以下托管类: 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

考虑以下托管类:

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;
    }
}
公共引用类数据提供程序
{
公众:
静态int ReadData(void*handlePtr,unsigned char*buffer,int cnt)
{
if(handlePtr==nullptr)
{
返回-1;
}
GCHandle handle=GCHandle::fromtptr(IntPtr::IntPtr(handlePtr));
System::IO::Stream^\u Stream=dynamic\u cast(handle.Target);
if(_stream==nullptr)
{
返回-1;
}
数组^data=gcnew数组(cnt);
pin_ptr dataPtr=&data[0];
int read=stream->read(数据,0,cnt);
如果(读取>0)
{
memcpy(缓冲区、数据ptr、cnt);
}
返回读取;
}
}
ReadData
方法通过非托管代码的回调调用。它工作,但分配临时
数据
缓冲区。看起来太过分了


问题:是否可以将原始的
缓冲区
传递到
流->读取
方法中,并消除此额外
数据
缓冲区的分配?

@HansPassant非常感谢您的评论。我将检查性能计数器,但此方法是核心组件,执行速度非常高。我需要确保不可能将已分配的缓冲区传递到托管方法以减少内存流量。@HansPassant非常感谢您的评论。我将检查性能计数器,但此方法是核心组件,执行速度非常高。我需要确保不可能将已分配的缓冲区传递到托管方法以减少内存流量。