我需要在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