首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >访问c#中的内存地址

访问c#中的内存地址
EN

Stack Overflow用户
提问于 2009-06-09 20:15:56
回答 4查看 11.5K关注 0票数 5

我正在与一个ActiveX组件交互,它为我提供了内存地址和字节数。

如何编写一个C#程序来访问从给定内存地址开始的字节?有没有一种方法可以在本地完成,或者我必须通过接口连接到C++?ActiveX组件和我的程序是否共享相同的内存/地址空间?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-06-09 21:11:20

我强烈建议您使用IntPtr和Marshal.Copy。这里有一些代码可以帮助您入门。memAddr是给定的内存地址,bufSize是大小。

代码语言:javascript
运行
复制
IntPtr bufPtr = new IntPtr(memAddr);
byte[] data = new byte[bufSize];
Marshal.Copy(bufPtr, data, 0, bufSize);

这不需要使用不安全的代码,因为不安全的代码需要/unsafe编译器选项,并且无法通过CLR进行验证。

如果需要字节以外的数组,只需更改第二行即可。Marshal.Copy有一堆重载。

票数 8
EN

Stack Overflow用户

发布于 2009-06-09 20:22:32

您可以使用Marshal.Copy将数据从本机内存复制到托管数组中。这样,您就可以在托管代码中使用数据,而无需使用unsafe代码。

票数 11
EN

Stack Overflow用户

发布于 2009-06-09 20:22:07

我认为您正在寻找的是IntPtr类型。这种类型(在unsafe块中使用时)将允许您使用ActiveX组件中的内存句柄。

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

https://stackoverflow.com/questions/972272

复制
相关文章

相似问题

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