こんばんは。
Ver. 1.5.2.1(2005-02-04)の CWSH.cpp をベースに変更し、
Win95(+IE5.5), WinMe(+IE5.5), WinXP(+IE6)でMsgBoxとInputBox
のダイアログが表示される事を確認しました。
(>>dev:3482 の中身が気になりますが…)
diff --dos -u1 CWSH_bef.cpp CWSH_aft.cpp > CWSH.diff
--- CWSH_bef.cpp Mon Jan 31 01:27:52 2005
+++ CWSH_aft.cpp Mon Apr 18 18:00:00 2005
@@ -181,5 +181,6 @@
-//IActiveScriptSite
+// Apr. 18, 2005 FILE IActiveScriptSiteWindow実装
+//IActiveScriptSite, IActiveScriptSiteWindow
-class CWSHSite: public ImplementsIUnknown<IActiveScriptSite>
+class CWSHSite: public IActiveScriptSite, public IActiveScriptSiteWindow
{
@@ -188,4 +189,5 @@
ITypeInfo *m_TypeInfo;
+ ULONG m_RefCount;
public:
- CWSHSite(CWSHClient *AClient): ImplementsIUnknown<IActiveScriptSite>(), m_Client(AClient)
+ CWSHSite(CWSHClient *AClient): m_RefCount(0), m_Client(AClient)
{
@@ -193,2 +195,30 @@
+ virtual ULONG _stdcall AddRef() {
+ return ++m_RefCount;
+ }
+
+ virtual ULONG _stdcall Release() {
+ if(--m_RefCount == 0)
+ {
+ delete this;
+ return 0;
+ }
+ return m_RefCount;
+ }
+
+ virtual HRESULT STDMETHODCALLTYPE QueryInterface(
+ /* [in] */ REFIID iid,
+ /* [out] */ void ** ppvObject)
+ {
+ *ppvObject = NULL;
+
+ if(iid == IID_IActiveScriptSiteWindow){
+ *ppvObject = static_cast<IActiveScriptSiteWindow*>(this);
+ ++m_RefCount;
+ return S_OK;
+ }
+
+ return E_NOTIMPL;
+ }
+
virtual HRESULT STDMETHODCALLTYPE GetLCID(
@@ -295,2 +325,16 @@
return S_OK;
+ };
+
+ // Apr. 18, 2005 FILE IActiveScriptSiteWindow実装
+ virtual HRESULT __stdcall GetWindow(
+ /* [out] */ HWND *phwnd)
+ {
+ *phwnd = ((CEditView*) m_Client->m_Data)->m_pcEditDoc->m_hWnd;
+ return S_OK;
+ }
+
+ virtual HRESULT __stdcall EnableModeless(
+ /* [in] */ BOOL fEnable)
+ {
+ return S_OK;
};
今回の変更で、特に以下の点が気になっています。
・GetWindow()でのウィンドウハンドルの取得方法
(モーダルにこだわらなければ、NULLや::GetDesktopWindow()でも良い様ですが)
・Visual C++ 6.0以外でもコンパイルや実行が可能かどうか
(特にIActiveScriptSiteWindow)
・ImplementsIUnknownを使わない事(>>dev:3347)による、想定外の動作が無いかどうか
上記の点、ご検証いただけますでしょうか。
以上、よろしくお願いいたします。