In order to understand the operation principle of the COM library, this experiment was deliberately done:
#include"stdafx.h"#include"objbase.h"#include"atlcomcli.h"#include"Limits"//#include "commctrl.h"#import"MSScript.ocx"No_namespaceextern "C"{typedef HRESULT (__stdcall *funcdllgetclassobject) (Refclsid rclsid,refiid riid,lpvoid *PPV);}structIScriptControl;int_tmain (intARGC, _tchar*argv[]) {Try{:: CoInitialize (NULL); Hmodule h=::loadlibrary ("MSScript.ocx"); if(H==null)return 0; Funcdllgetclassobject func= (Funcdllgetclassobject):: GetProcAddress (H,"DllGetClassObject"); if(Func==null)return 0; IClassFactory*pfactory=NULL; Func (__uuidof (ScriptControl), Iid_iclassfactory, (void* *) &pfactory); if(Pfactory==null)return 0; IScriptControl*pscript=NULL; //Pfactory->queryinterface (__uuidof (IScriptControl), (void**) &pscript); //0E59F1D3-1FBE-11D0-8FF2-00A0D10038BC//IID ID;//=__uuidof (IScriptControl);IID ID; Id. Data1=0x0e59f1d3; Id. Data2=0x1fbe; Id. Data3=0x11d0; Id. data4[0]=0X8f; Id. data4[1]=0Xf2; Id. data4[2]=0x00; Id. data4[3]=0Xa0; Id. data4[4]=0Xd1; Id. data4[5]=0x00; Id. data4[6]=0X38; Id. data4[7]=0XBC; //pfactory->createinstance (Null,__uuidof (IScriptControl), (void**) &pscript);Pfactory->createinstance (Null,id, (void* *) &pscript); Pfactory-Release (); Pscript-Put_allowui (VARIANT_FALSE); Pscript->putlanguage (L"JScript"); _variant_t v=pscript->eval ("1+2+3+4+5"); intI=pscript->Release (); :: FreeLibrary (h); :: CoUninitialize (); return 0;}Catch(...) { //:: FreeLibrary (h);:: CoUninitialize ();}}
ActiveX objects are not used through the registry