我需要在ActiveX(ATL)项目中使用全局变量的帮助。基本上,ActiveX组件功能是导航到复合控件中的指定URL(网页浏览器嵌入)。 URL字符串在开始时初始化并保存在全局变量中。这里是我的ActiveX项目的源代码文件。如何在ATL项目中保持全局变量值不变?
(不要关心语法,我只是想显示代码流)。
MyComponentInit.cpp
// MyComponentInit.cpp : Implementation of MyComponentInit.cpp
#include "stdafx.h"
#include <ios>
char szURL[1024] = "\0"; // global variable holding URL string
STDMETHODIMP CMyComponentInit::InitPlugin(BSTR url)
{
// convert BSTR to string
......
memcpy(szURL, szUrl, len);
}
MyComponentCtrl.cpp
// MyComponentCtrl.cpp : Implementation of MyComponentCtrl.cpp
#include "stdafx.h"
extern char szURL[1024]
LRESULT CMyComponentCtrl::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
......
m_spWebbrowser->Navigate(szURL, &v, &v, &v, &v);
}
mycomponent ActiveX的使用在MFC SDI(单文档/视图)测试应用程序中。流程是这样的:
- 在应用程序的InitInstance,我打电话的ActiveX InitPlugin初始化URL字符串。
- 在信息对话框窗口中插入MyComponentCtrl ActiveX,通过单击主机信息菜单项调出信息对话框。目标是当信息对话窗口弹出时,它总是可以转到指定的URL。
我的MFC测试应用程序启动后,我单击信息对话框菜单,信息对话框窗口可以启动并正确导航到该URL。
但问题是如果我关闭信息对话框,等待一段时间(大约2〜3分钟),我试图再次调出信息对话框,它无法导航到URL。我调试它,发现MyComponenet项目中的全局变量szURL失去了它的价值。
你能告诉我该怎么做才能解决这个问题?
非常感谢!
Bionicoder
嗨dmercredi,谢谢!你是对的。 fdwReason == DLL_PROCESS_DETACH在空闲时间后被触发。 我需要使用全局var coz总共5个复合ctrls使用这个。所以我正在寻找保持一生的初始化参考。做这个的最好方式是什么?我是新来的ActiveX。 – bionicoder 2009-04-11 01:11:49