C# 试图读取或写入受保护内存c和c++;

C# 试图读取或写入受保护内存c和c++;,c#,c++,memory,dll,export,C#,C++,Memory,Dll,Export,首先让我解释一下我正在构建什么,这样它将帮助您了解如何解决我的问题。 我建立了dll文件,它被注入到程序中,然后在dll中有一个函数, 它在程序内部编辑一个内存地址,但是这个函数被导出到我的c#app中 当我从c#调用函数时,我遇到了一个错误:试图读取或写入受保护的内存 我的dll代码(c++): c#中的导入函数: c#中的用法: 我将非常感谢您的帮助。有问题的内存是否映射了可执行文件?如果是这样,VirtualProtect将返回0(失败),并且将设置GetLastError()。GetLa

首先让我解释一下我正在构建什么,这样它将帮助您了解如何解决我的问题。 我建立了dll文件,它被注入到程序中,然后在dll中有一个函数, 它在程序内部编辑一个内存地址,但是这个函数被导出到我的c#app中

当我从c#调用函数时,我遇到了一个错误:试图读取或写入受保护的内存

我的dll代码(c++):

c#中的导入函数:

c#中的用法:


我将非常感谢您的帮助。

有问题的内存是否映射了可执行文件?如果是这样,
VirtualProtect
将返回
0
(失败),并且将设置
GetLastError()
。GetLastError()返回87MSDN表示:ERROR\u INVALID\u参数。“windows getlasterror 87”的第一个结果您知道如何解决它吗?
extern "C" __declspec(dllexport) void GamePool_Vehicle_GetAt()
{
    DWORD d;
    VirtualProtect((PVOID)0x863984,4,PAGE_EXECUTE_READWRITE,&d);
    *(float*)0x863984 = 0.0008f;
}
[DllImport(@"C:\Users\ABCD\Documents\Visual Studio 2010\Projects\uclient_dll2\Debug\uclient_dll2.dll", EntryPoint = "GamePool_Vehicle_GetAt",
CallingConvention = CallingConvention.StdCall)]
public static extern void GamePool_Vehicle_GetAt();
private void button3_Click_2(object sender, EventArgs e)
{
    GamePool_Vehicle_GetAt();
}