3

我的 C# 程序是使用 AnyCPU 选项编译的,我使用 P/Invoke 以这种方式调用本机 API:

[DllImport("kernel32.dll", SetLastError = true)]
        static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out UIntPtr lpNumberOfBytesWritten);

我的猜测是,我的 c# 程序可以从 32 位和 64 位进程中读取和写入,因为它是用 anycpu 编译的?还是会有问题?我问这个是因为我只有 32 位操作系统,所以我无法测试它。谢谢

4

1 回答 1

3

在 32 位操作系统上,所有进程都是 32 位的,因此不会出现问题。在 64 位操作系统上,您的 AnyCPU 进程运行 64 位,唯一可能的不匹配是 32 位进程。但是在 64 位指针中存储 32 位地址是没有问题的。如果您尝试从 32 位进程读取/写入 64 位进程中的内存,您将被卡住。但是,由于您正在做相反的事情,所以没有麻烦。

于 2011-07-03T16:34:48.500 回答