在浏览器辅助对象中创建静态变量 我有一个DLL,作为C++浏览器助手对象(BHO)加载到Internet Explorer中。我想在每次重新启动浏览器时创建一个唯一的GUID。我尝试了3种不同的解决方案:

在浏览器辅助对象中创建静态变量 我有一个DLL,作为C++浏览器助手对象(BHO)加载到Internet Explorer中。我想在每次重新启动浏览器时创建一个唯一的GUID。我尝试了3种不同的解决方案:,c++,dll,dllimport,bho,dllexport,C++,Dll,Dllimport,Bho,Dllexport,1) 创建一个全局静态变量。然而,打开一个新选项卡似乎会创建一个新的进程,并且变量状态不会在插件的不同加载实例之间传递 2) 我尝试创建一个单例类,在其中维护一个返回GUID的对象。也不起作用,可能是因为与[1]相同的原因 3) 最后,我尝试设置会话cookie(使用InternetSetCookie)。但是,会话cookie是每个进程的,这基本上意味着打开新选项卡不会传递会话cookie 是否有一种简单的方法可以在BHO的所有实例(即DLL)之间共享状态。我读过关于uu declspec(dl

1) 创建一个全局静态变量。然而,打开一个新选项卡似乎会创建一个新的进程,并且变量状态不会在插件的不同加载实例之间传递

2) 我尝试创建一个单例类,在其中维护一个返回GUID的对象。也不起作用,可能是因为与[1]相同的原因

3) 最后,我尝试设置会话cookie(使用InternetSetCookie)。但是,会话cookie是每个进程的,这基本上意味着打开新选项卡不会传递会话cookie


是否有一种简单的方法可以在BHO的所有实例(即DLL)之间共享状态。我读过关于uu declspec(dllexport)的文章,但不确定这是否是解决此问题的正确方法。这似乎更倾向于在不同的DLL之间共享变量。一、 另一方面,具有同一DLL的多个实例。

您可以创建共享数据段并在此段下创建变量。 这些变量可以跨流程访问

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

// 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")