您好我现在正在编写包含MemoryRead函数的Memory类。我有第一个MemoryReadInt,但当我想到其他类型的多个函数,如字符串浮动..太多了。一个代码更改也需要在每个函数上进行更改。
所以我想到了类型。
但我卡住了。这是我的主要内容。
Memory m = new Memory("lf2");
Console.WriteLine("Health: " + m.MemoryRead<int>(0x00458C94, 0x2FC));
m.CloseMemoryprocess();
现在这是函数
public int MemoryRead<T>(int baseAdresse, params int[] offsets)
{
if(!ProcessExists())
return -1;
uint size = sizeof(T); << this cause the error
byte[] buffer = new byte[size];
因为我需要sizeof因为我需要定义缓冲区的大小。
此外,返回值也会很快改变为T.所以我不知道我能在这做什么。我希望你能帮助我。
顺便说一下,我现在只想使用string,int,float。我可以限制它吗?
答案 0 :(得分:0)
我想我需要回答我自己的问题。经过长时间的研究(昨天......我需要先睡觉然后发布:D)我改变了我的计划。
我首先寻找类型。 然后我去下一个MemoryRead需要一个uint大小。其中还检查类型。但是如果客户使用uint大小和T字符串。所以函数知道他想要回来。但字符串需要用户给出的大小:D
public T MemoryRead<T>(int baseAdresse, params int[] offsets)
{
if(!ProcessExists())
return default(T);
uint size = 0;
if(typeof(T) == typeof(int)) {
size = sizeof(int);
return (T)(object)MemoryRead<int>(baseAdresse, size, offsets);
} else if(typeof(T) == typeof(float)) {
size = sizeof(float);
return (T)(object)MemoryRead<float>(baseAdresse, size, offsets);
} else if(typeof(T) == typeof(double)) {
size = sizeof(double);
return (T)(object)MemoryRead<double>(baseAdresse, size, offsets);
}else {
MessageBox.Show("Wrong type. Maybe you want to use MemoryRead<string>(int, uint, params [] int)", "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
throw new ArgumentException("Wrong type. Maybe you want to use MemoryRead<string>(int, uint, params [] int)");
}
}
替代方案我也可以这样做:因为重载函数需要uint ..并且用户可以忘记它转换为uint并使用int ..这只会填充参数:
public int MemoryReadInt(int baseAdresse, params int[] offsets)
{
return MemoryRead<int>(baseAdresse, sizeof(int), offsets);
}
public string MemoryReadString(int baseAdresse, uint readSize, params int[] offsets)
{
return MemoryRead<string>(baseAdresse, readSize, offsets);
}