Czy poniższy fragment można przekonwertować na C# .NET?Konwertowanie funkcji z C++ na C#
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
}
Jest to bardzo pomocne, gdy chcemy odczytać dane z pamięci w C++, bo to ogólna: można użyć Read<"int">(0x00)"
lub Read<"vector">(0x00)
i mieć to wszystko w jednej funkcji.
W C# .NET, to nie działa dla mnie, ponieważ do odczytu pamięci, potrzebujesz DLLImport ReadProcessMemory, który ma predefiniowane parametry, które oczywiście nie są ogólne.
Być może można użyć strategia sugeruje tutaj: http://stackoverflow.com/a/6336196/3150802. Ale nie mam pewności, jak to spakować w zgrabną, jednorazową funkcję generyczną. Być może wymuś użycie klas do odczytu, aby zaimplementować jakiś typowy interfejs. –
Dla typów wartości (structs, które zawierają tylko dane niezarządzane) prawdopodobnie możesz po prostu użyć adresu pamięci jako wskaźnika do struktury i zwrócić kopię tej instancji, całkowicie ogólnie, z ograniczeniem 'where T: struct' dla argumentu type. –
W twojej nowej "nie" odpowiedzi "poniżej" powiedziałeś, że chcesz zwrócić wektor. Czy możesz wyjaśnić (oczywiście w tym oryginalnym poście)? Pytanie jest interesujące, ale nie rozumiem, dlaczego chciałbyś stworzyć wektor, jeśli istnieje int na podany adres. –