我有一个DLL,我作为C ++浏览器帮助程序对象(BHO)加载到Internet Explorer中。我希望每次重新启动浏览器时都创建一个唯一的GUID。我尝试了3种不同的解决方案:
1)创建一个全局静态变量。但是,似乎打开一个新选项卡会创建一个新进程,并且该变量状态不会通过插件的不同加载实例传递。
2)我尝试创建一个单例类,其中我维护一个返回GUID的对象。也没有用,可能是因为[1]的原因相同。
3)最后,我尝试设置会话cookie(使用InternetSetCookie)。但是,会话cookie是按进程进行的,这基本上意味着打开新选项卡不会传递会话cookie。
是否有一种简单的方法可以在BHO的所有实例(即DLL)之间共享状态。我读到了__declspec(dllexport),但不确定这是否是解决此问题的正确方法。这似乎更倾向于在不同的DLL之间共享变量。另一方面,我有同一个DLL的多个实例。
答案 0 :(得分: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")