Преобразование функции из C ++ в C #

Можно ли преобразовать следующий фрагмент в C # .NET?

template <class cData>
cData Read(DWORD dwAddress)
{
cData cRead; //Generic Variable To Store Data
ReadProcessMemory(hProcess, (LPVOID)dwAddress, &cRead, sizeof(cData), NULL); //Win API - Reads Data At Specified Location
return cRead; //Returns Value At Specified dwAddress
}

Это действительно полезно, когда вы хотите прочитать данные из памяти в C ++, потому что это универсально: вы можете использовать Read<"int">(0x00)" или же Read<"vector">(0x00) и все это в одной функции.

В C # .NET это не работает для меня, потому что для чтения памяти вам нужна DLLImport ReadProcessMemory, которая имеет предопределенные параметры, которые, конечно, не являются общими.

5

Решение

Не будет ли что-то подобное этой работой?

using System.Runtime.InteropServices;

public static T Read<T>(IntPtr ptr) where T : struct
{
return (T)Marshal.PtrToStructure(ptr, typeof(T));
}

Это будет работать только со структурами, вам нужно будет рассматривать сортировку строк как особый неуниверсальный случай, если вам это нужно.

Простая проверка, чтобы увидеть, работает ли он:

var ptr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(int)));
var three = 3;
Marshal.StructureToPtr(three, ptr, true);
var data = Read<int>(ptr);
Debug.Assert(data == three); //true
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]