我正在处理内存读取器/写入器类,但我坚持使用它。 我的问题是我想用结构指针修改其他进程内存值。 我知道如何在C ++中完成它而不是用C#
我目前的代码是:
class CModifier
{
struct Data
{
int iMember;
float fMember;
}
public CModifier()
{
Data data[62];
*data = 0x123456;
// use them to modify values etc.
data.fMember = 1.2345f;
}
}
答案 0 :(得分:2)
C#允许有限访问内存位置,但实际上并不推荐,只有在您知道其他系统(如垃圾回收)如何处理内存后才应尝试。引用运算符&
和去引用运算符*
用于访问内存。您还必须在方法声明中使用unsafe
关键字。举个例子:
public unsafe void Method()
{
int x = 10;
int y = 20;
int *ptr1 = &x;
int *ptr2 = &y;
Console.WriteLine((int)ptr1);
Console.WriteLine((int)ptr2);
Console.WriteLine(*ptr1);
Console.WriteLine(*ptr2);
}
请注意,还有其他更高级的事情需要考虑,例如固定内存位置以阻止垃圾收集器在内存中移动对象,以及此过程对堆栈堆的影响。
底线,使用指针引用需要您自担风险,并且仅作为最后的手段。
答案 1 :(得分:-2)
我觉得C ++专业人士会因为没有使用正确的技术术语而抨击我的帖子,但是很好。
C#有一个'unsafe'修饰符,可以用来设置指针调整代码,但是在另一个位置修改结构的更好选项是'ref'关键字。
我不能说 - 确切地说 - 你想要完成的事情可以在C#中完成(哎呀,我不确定我是否会在C ++中理解它),但这就是我如何做到的,如同你已经描述过了。
void ChangeMyStruct(ref Data etc) {
data.fMember = 1.2345f;
}
void mainMethod() {
ChangeMyStruct(ref dataOne);
}