1,大概搞明白activex控件的运行流程了。不过还是没跑起flash。
原来昨天提到的CPluginSite,只是用来加载plugin.ocx,再模拟npapi的。
实际的<object>代码在
COleSite和\win2k\private\inet\mshtml\src\site\ole\eobject.cxx
其中COleSite是基类。
下面是个堆栈:
Flash32_22_0_0_210.ocx!0560e5ae() 未知
[下面的框架可能不正确和/或缺失,没有为 Flash32_22_0_0_210.ocx 加载符号]
> mshtml.dll!COleSite::LoadObject(struct IPropertyBag *) 未知
mshtml.dll!COleSite::CreateObjectNow(struct _GUID const &,struct IUnknown *,struct COleSite::OLECREATEINFO *) 未知
mshtml.dll!CCodeLoad::OnObjectAvailable(struct _GUID const &,struct IUnknown *) 未知
mshtml.dll!CCodeLoad::BindToObject(void) 未知
mshtml.dll!CCodeLoad::Init(class COleSite *,struct COleSite::OLECREATEINFO *) 未知
mshtml.dll!COleSite::CreateObject(struct COleSite::OLECREATEINFO *) 未知
mshtml.dll!CObjectElement::FinalCreateObject(unsigned short const *) 未知
mshtml.dll!CObjectElement::CreateObject(void) 未知
mshtml.dll!CHtmObjectParseCtx::Execute(void) 未知
mshtml.dll!CHtmParseBase::Execute(void) 未知
mshtml.dll!CHtmPost::Exec(unsigned long) 未知
mshtml.dll!CHtmPost::Run(unsigned long) 未知
mshtml.dll!PostManExecute(struct THREADSTATEUI *,unsigned long,class CHtmPost *) 未知
mshtml.dll!PostManResume(class CHtmPost *,int) 未知
mshtml.dll!CHtmPost::OnDwnChanCallback(void *,void *) 未知
mshtml.dll!CDwnChan::OnMethodCall(unsigned long) 未知
mshtml.dll!GlobalWndOnMethodCall(void) 未知
mshtml.dll!GlobalWndProc(struct HWND__ *,unsigned int,unsigned int,long) 未知
user32.dll!_InternalCallWinProc@20() 未知
user32.dll!_UserCallWinProcCheckWow@32() 未知
user32.dll!_DispatchMessageWorker@8() 未知
user32.dll!_DispatchMessageW@4() 未知
testdll.exe!wWinMain(HINSTANCE__ * hInstance=0x00110000, HINSTANCE__ * hPrevInstance=0x00000000, wchar_t * lpCmdLine=0x006f2ae2, int nCmdShow=0x0000000a) 行 472 C++
testdll.exe!invoke_main() 行 128 C++
testdll.exe!__scrt_common_main_seh() 行 264 C++
testdll.exe!__scrt_common_main() 行 309 C++
testdll.exe!wWinMainCRTStartup() 行 17 C++
kernel32.dll!@BaseThreadInitThunk@12() 未知
ntdll.dll!___RtlUserThreadStart@8() 未知
ntdll.dll!__RtlUserThreadStart@8() 未知
可以看出会先走个网络流程,判断ocx是否需要网络下。如果不需要,就loadobject。这个是以IPropertyBag为参数的。
这个IPropertyBag是表示<PARAM>.
目前在把N多缺少的com接口,如class CHTMLDocument都实现后,可以发现昨天没跑到的CPropertyBag跑到了。也就是说flash去读了参数列表了。但还是不知道为何没加载成功