Являются ли win32 hInstances уникальными?

Я пишу обработчик кэша, которому нужен уникальный идентификационный номер для каждого экземпляра приложения, чтобы, когда у кого-то было открыто два проекта в двух экземплярах, кэши не перепутались. Согласно этой теме, кажется, HINSTANCE перешел к WinMain является дескриптором модуля, который может быть просто exe, а не обязательно уникальным идентификатором процесса.

Кажется, что поток говорит, что информация о модуле / процессе, который должен быть запущен, заносится в память только один раз, и HINSTANCE является ручкой к этому. Означает ли это HINSTANCE нельзя использовать в качестве уникального идентификатора для процесса, потому что все они указывают на один и тот же модуль? Или я ошибаюсь?

2 ответа

Решение

HINSTANCE в основном устарел, пережиток 16-битных дней. Он будет иметь одинаковое значение для всех экземпляров вашего приложения.

Для уникального идентификатора процесса используйте GetCurrentProcessId

На Win32 HINSTANCE соответствует HMODULE исполняемого файла, который в свою очередь сводится к его базовому адресу. Он не является уникальным для процесса в любом случае - AFAIK данный исполняемый файл всегда будет загружен по его запрошенному базовому адресу.

Вы можете либо использовать идентификатор процесса для своей задачи, либо, если проблема заключается в том, что идентификаторы процесса перерабатываются, или если вы предпочитаете уникальный идентификатор для разных машин, просто сгенерируйте новый GUID при запуске и используйте его в качестве идентификатора.

Другие вопросы по тегам