我正在与一个ActiveX组件交互,它为我提供了内存地址和字节数。
如何编写一个C#程序来访问从给定内存地址开始的字节?有没有一种方法可以在本地完成,或者我必须通过接口连接到C++?ActiveX组件和我的程序是否共享相同的内存/地址空间?
发布于 2009-06-09 21:11:20
我强烈建议您使用IntPtr和Marshal.Copy。这里有一些代码可以帮助您入门。memAddr是给定的内存地址,bufSize是大小。
IntPtr bufPtr = new IntPtr(memAddr);
byte[] data = new byte[bufSize];
Marshal.Copy(bufPtr, data, 0, bufSize);这不需要使用不安全的代码,因为不安全的代码需要/unsafe编译器选项,并且无法通过CLR进行验证。
如果需要字节以外的数组,只需更改第二行即可。Marshal.Copy有一堆重载。
发布于 2009-06-09 20:22:32
您可以使用Marshal.Copy将数据从本机内存复制到托管数组中。这样,您就可以在托管代码中使用数据,而无需使用unsafe代码。
发布于 2009-06-09 20:22:07
我认为您正在寻找的是IntPtr类型。这种类型(在unsafe块中使用时)将允许您使用ActiveX组件中的内存句柄。
https://stackoverflow.com/questions/972272
复制相似问题