win32 hInstances 是唯一的吗?

Are win32 hInstances unique?

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

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

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

对于唯一进程 ID,使用 GetCurrentProcessId

在 Win32 上,HINSTANCE 对应于可执行文件的 HMODULE,这又归结为它的基地址。它在任何方面都不是进程所独有的——据我所知,给定的可执行文件将始终加载到其请求的基地址。

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