在功能之间共享进程ID和句柄时存在问题

时间:2019-05-23 14:09:13

标签: c++ winapi

一段时间以来,我一直在做一个内存读写器,而我遇到了一些问题。

我制作了一个简单的Memory.h / Memory.cpp来处理内存调用。 我的Main.cpp调用了“ GetProcessID”和“ OpenProcess”。这一切都很好。 但是我决定将事情分解为多个cpp文件。

例如,我附加了一些代码。

Main.cpp:

#include <Windows.h>
#include <iostream>
#include "Other.h"
#include "Memory.h"

Using namespace std;

Memory Mem;

int main(){

Mem.GetProcessID(ProcessName); // Getting Process ID
cout << "Main.cpp ProcID : " << Mem.ProcID;
TestCall();


}

在此我得到了我期望的进程ID。 在Other.h中:

#include "Other.cpp"
void TestCall();

在Other.cpp中:

#include "Other.h"
#include "Memory.h"
#include <windows.h>
#include <iostream>

using namespace std;

Memory Mem1;

void TestCall()
{
cout << "Other.cpp ProcID: " << Mem1.ProcID;
}

我在控制台上都收到了两个提示,但是主显示ProcID,Other.cpp显示0,除非我也添加:

Mem1.GetProcessID(ProcessName);

to other.cpp。

有没有一种方法可以“共享”进程ID?我还将继续获取基本模块地址并打开一个句柄。这些也不是“共享的”。我真的不想打开2个句柄,2个基址调用等。

我尝试过的事情...

1)将其放入Memory.h:

class Memory{
Public:
DWORD ProcID;
}

万一有人在想...这是我的memory.h和memory.cpp

Memory.h(在公共类中)

DWORD GetProcessID(LPCTSTR ProcessName);

Memory.cpp

DWORD Memory::GetProcessID(LPCTSTR ProcessID) 
{
HWND gWindow = FindWindow(NULL, ProcessID);
DWORD ProcIDBuffer;
GetWindowThreadProcessId(gWindow, &ProcIDBuffer);
return Memory::ProcID = ProcIDBuffer; 
}

谢谢!

1 个答案:

答案 0 :(得分:0)

一种方法:在other.cpp中,更改:

Memory Mem1;

收件人:

extern Memory Mem;

然后更改:

Mem1.ProcID

收件人:

Mem.ProcID

但实际上,您应该read a good book