Являются ли win32 hInstances уникальными?
Я пишу обработчик кэша, которому нужен уникальный идентификационный номер для каждого экземпляра приложения, чтобы, когда у кого-то было открыто два проекта в двух экземплярах, кэши не перепутались. Согласно этой теме, кажется, HINSTANCE
перешел к WinMain
является дескриптором модуля, который может быть просто exe, а не обязательно уникальным идентификатором процесса.
Кажется, что поток говорит, что информация о модуле / процессе, который должен быть запущен, заносится в память только один раз, и HINSTANCE
является ручкой к этому. Означает ли это HINSTANCE
нельзя использовать в качестве уникального идентификатора для процесса, потому что все они указывают на один и тот же модуль? Или я ошибаюсь?
2 ответа
HINSTANCE
в основном устарел, пережиток 16-битных дней. Он будет иметь одинаковое значение для всех экземпляров вашего приложения.
Для уникального идентификатора процесса используйте GetCurrentProcessId
На Win32 HINSTANCE
соответствует HMODULE
исполняемого файла, который в свою очередь сводится к его базовому адресу. Он не является уникальным для процесса в любом случае - AFAIK данный исполняемый файл всегда будет загружен по его запрошенному базовому адресу.
Вы можете либо использовать идентификатор процесса для своей задачи, либо, если проблема заключается в том, что идентификаторы процесса перерабатываются, или если вы предпочитаете уникальный идентификатор для разных машин, просто сгенерируйте новый GUID при запуске и используйте его в качестве идентификатора.