1

我正在编写一个缓存处理程序,它需要应用程序的每个实例的唯一 ID 号,这样当有人在两个实例中打开两个项目时,缓存不会混淆。根据这个线程HINSTANCE,传递给的似乎WinMain是模块的句柄,它可能只是 exe,不一定是唯一的进程 ID。

该线程似乎说有关要运行的模块/进程的信息只被带入内存一次,并且HINSTANCE是一个句柄。这是否意味着HINSTANCE不能用作进程的唯一标识符,因为它们都指向同一个模块?还是我弄错了?

4

2 回答 2

6

HINSTANCE大部分已过时,是 16 位时代的遗留物。对于您的应用程序的所有实例,它将具有相同的值。

对于唯一的进程 ID,请使用GetCurrentProcessId

于 2019-01-03T01:15:59.363 回答
2

在 Win32 上,HINSTANCE对应于HMODULE可执行文件的 ,而后者又归结为它的基地址。它以任何方式都不是该进程独有的——AFAIK 给定的可执行文件将始终加载到其请求的基地址。

您可以为您的任务使用进程 ID,或者,如果进程 ID 被回收这一事实是一个问题,或者如果您更喜欢跨机器的唯一 ID,则只需在启动时生成一个新的 GUID 并将用作 ID。

于 2019-01-03T01:20:54.463 回答