首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用接受具有非托管IntPtr的byte[]的C#方法

调用接受具有非托管IntPtr的byte[]的C#方法
EN

Stack Overflow用户
提问于 2013-12-18 22:51:28
回答 1查看 219关注 0票数 0

我的程序由3个组件组成

1) C#前端

2) C++/CLI包装器

3) C++后端

C# FE包含一个通过从HttpWebRequest类获取Stream与web进行通信的方法。此方法通过包装器传递给C++后端,后者在有新字节要发送时调用该方法。

代码语言:javascript
复制
C#  
void WriteBytes(IntPtr pBody, int cbBody); // Marshal.Copy'es the data from
     IntPtr to managed byte[], then calls Stream.WriteBytes(byte[], ...)

C++/CLI
void WriteBytes(System::IntPtr pBody, int cbBody); // uses
     Marshal::GetFunctionPointerForDelegate

C++
void WriteBytes(const BYTE* pBody, size_t cbBody); // calls function pointer 
    received from the wrapper

我希望对此进行优化,不将字节从非托管字节*复制到托管byte[],因为我控制所有阶段的内存分配。

这个是可能的吗?

它应该提高性能吗?

EN

回答 1

Stack Overflow用户

发布于 2013-12-19 17:35:02

不能将任意缓冲区转换为array<Byte>,但可以固定array<Byte>并获取指向其第一个元素的非托管指针,该指针在对象解除固定之前一直有效。

如果您想在C#中执行此操作,请参见C++/CLIpin_ptr<>类和GCHandle类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20661292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档