win32 hInstances 是唯一的吗?
Are win32 hInstances unique?
我正在编写一个缓存处理程序,它需要应用程序的每个实例都有一个唯一的 ID 号,这样当有人在两个实例中打开两个项目时,缓存就不会混淆。根据 this thread,似乎传递给 WinMain
的 HINSTANCE
是模块的句柄,它可能只是 exe,不一定是唯一的进程 ID。
线程似乎说有关 module/process 的信息是 运行 只被带入内存一次,而 HINSTANCE
是它的句柄。这是否意味着 HINSTANCE
不能用作进程的唯一标识符,因为它们都指向同一个模块?还是我记错了?
HINSTANCE
大部分已过时,是 16 位时代的遗留物。它对您的应用程序的所有实例都具有相同的值。
对于唯一进程 ID,使用 GetCurrentProcessId
在 Win32 上,HINSTANCE
对应于可执行文件的 HMODULE
,这又归结为它的基地址。它在任何方面都不是进程所独有的——据我所知,给定的可执行文件将始终加载到其请求的基地址。
您可以为您的任务使用进程 ID,或者,如果进程 ID 被回收是一个问题,或者如果您更喜欢跨机器的唯一 ID,只需在启动时生成一个新的 GUID 并使用 那个作为ID.
我正在编写一个缓存处理程序,它需要应用程序的每个实例都有一个唯一的 ID 号,这样当有人在两个实例中打开两个项目时,缓存就不会混淆。根据 this thread,似乎传递给 WinMain
的 HINSTANCE
是模块的句柄,它可能只是 exe,不一定是唯一的进程 ID。
线程似乎说有关 module/process 的信息是 运行 只被带入内存一次,而 HINSTANCE
是它的句柄。这是否意味着 HINSTANCE
不能用作进程的唯一标识符,因为它们都指向同一个模块?还是我记错了?
HINSTANCE
大部分已过时,是 16 位时代的遗留物。它对您的应用程序的所有实例都具有相同的值。
对于唯一进程 ID,使用 GetCurrentProcessId
在 Win32 上,HINSTANCE
对应于可执行文件的 HMODULE
,这又归结为它的基地址。它在任何方面都不是进程所独有的——据我所知,给定的可执行文件将始终加载到其请求的基地址。
您可以为您的任务使用进程 ID,或者,如果进程 ID 被回收是一个问题,或者如果您更喜欢跨机器的唯一 ID,只需在启动时生成一个新的 GUID 并使用 那个作为ID.