c# создание объекта в определенном адресе памяти


Возможно ли в C# (в небезопасном Codecontext ) создать объект по определенному адресу памяти?

Мой Код:

object _apiId = new ApiId();
var apiID = (ApiId)_apiId;
ApiId* pointer = &apiID;
Debug.Write(new Intptr(pointer));
2 2

2 ответа:

Нет, потому что адрес памяти не имеет смысла, когда GC может перемещать объекты и указатели становятся недействительными. Вот почему здесь используется ключевое слово reference вместо pointer

Обходной путь:

P / вызов метода: memcpy из msvrct.dll:

[DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl,
            SetLastError = false)]
        public static extern IntPtr memcpy(IntPtr dest, IntPtr src, UIntPtr count);

Вам нужен размер объекта, который вы хотите скопировать:

var size = (uint) Marshal.SizeOf(obj);

Вам нужно закрепить его:

GCHandle handle = GCHandle.Alloc(obj, GCHandleType.Pinned);

Наконец вызовем метод memcpy:

 var _adress = NativeMethods.memcpy(new IntPtr(1115911111), handle.AddrOfPinnedObject(), new UIntPtr(size));