2015-08-31 7 views
-1

У меня есть DLL, которую я загружаю в Internet Explorer в качестве вспомогательного объекта браузера C++ (BHO). Я хочу создать уникальный GUID каждый раз, когда браузер перезагружается. Я попробовал 3 разных решения:Создать статическую переменную в объекте помощника браузера

1) Создайте глобальную статическую переменную. Тем не менее, кажется, что открытие новой вкладки создает новый процесс, и это состояние переменной не передается через разные загруженные экземпляры плагина.

2) Я пробовал создать одноэлементный класс, где я поддерживаю один объект, который возвращает GUID. Не работает, возможно, по тем же причинам, что и [1].

3) Наконец, я попытался установить cookie сессии (используя InternetSetCookie). Однако cookie сеанса предназначен для каждого процесса, что в основном означает, что открытие новой вкладки не переходит к файлу cookie сеанса.

Есть ли простой способ разделить состояние между всеми экземплярами BHO (например, DLL). Я читал о __declspec (dllexport), но не уверен, что это правильное решение этой проблемы. Это, по-видимому, больше касается обмена переменными между различными DLL. У меня, с другой стороны, есть несколько экземпляров одной и той же DLL.

ответ

0

Вы можете создать сегмент разделяемых данных и создать переменные под этим сегментом. Эти переменные могут быть доступны для всех процессов.

//////////////////////////////////////////////////////////// 

// The following variable is shared across all processes 
#pragma data_seg("SHARED_SEG") // Begin shared data segment 
LONG gCounter = 0; 
#pragma data_seg() // End the shared data segment and default back to the normal data segment behavior. 
#pragma comment(linker, "/section:SHARED_SEG,RWS") 
Смежные вопросы