Access memory address in c#

你离开我真会死。 提交于 2019-12-03 00:41:43

I highly suggest you use an IntPtr and Marshal.Copy. Here is some code to get you started. memAddr is the memory address you are given, and bufSize is the size.

IntPtr bufPtr = new IntPtr(memAddr);
byte[] data = new byte[bufSize];
Marshal.Copy(bufPtr, data, 0, bufSize);

This doesn't require you to use unsafe code which requires the the /unsafe compiler option and is not verifiable by the CLR.

If you need an array of something other than bytes, just change the second line. Marshal.Copy has a bunch of overloads.

You can use Marshal.Copy to copy the data from native memory into an managed array. This way you can then use the data in managed code without using unsafe code.

I think you are looking for the IntPtr type. This type (when used within an unsafe block) will allow you to use the memory handle from the ActiveX component.

C# can use pointers. Just use the 'unsafe' keyword in front of your class, block, method, or member variable (not local variables). If a class is marked unsafe all member variables are unsafe as well.

unsafe class Foo
{

}

unsafe int FooMethod
{

}

Then you can use pointers with * and & just like C.

I don't know about ActiveX Components in the same address space.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!