您的位置:首页 > 其它

不通过注册表使用ActiveX对象

2015-10-25 16:23 239 查看
为了弄清楚COM库的运行原理,特意做了这个实验:

#include "stdafx.h"
#include "objbase.h"
#include "atlcomcli.h"
#include "limits"
//#include "commctrl.h"
#import "msscript.ocx" no_namespace
extern "C"{ typedef HRESULT (__stdcall *FuncDllGetClassObject)(REFCLSID rclsid,REFIID riid,LPVOID * ppv);}
struct IScriptControl;
int _tmain(int argc, _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");
int i=pScript->Release();
::FreeLibrary(h);
::CoUninitialize();
return 0;
}
catch(...)
{
//::FreeLibrary(h);
::CoUninitialize();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: