访问c#中的内存地址

cho*_*osh 5 c# activex memory-management

我正在连接一个ActiveX组件,它给我一个内存地址和字节数.

如何编写一个C#程序来访问从给定内存地址开始的字节?有没有办法本机化,或者我将不得不与C++接口?ActiveX组件和我的程序共享相同的内存/地址空间吗?

Ben*_*ehn 11

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


Bry*_*hle 7

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

IntPtr bufPtr = new IntPtr(memAddr);
byte[] data = new byte[bufSize];
Marshal.Copy(bufPtr, data, 0, bufSize);
Run Code Online (Sandbox Code Playgroud)

这不要求您使用不安全的代码,该代码需要/ unsafe编译器选项,并且无法通过CLR验证.

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