else
return E_NOINTERFACE;
reinterpret_cast<IUnknown*>(*ppvObject)->AddRef();
return S_OK;
}
HRESULT __stdcall CClassFactory::CreateInstance(IUnknown* pUnkownOuter,REFIID riid,void** ppvObj){
if(pUnkownOuter!=NULL)
return CLASS_E_NOAGGREGATION;
CCopyHook* pObj=new CCopyHook;
pObj->AddRef();
HRESULT hr=pObj->QueryInterface(riid,ppvObj);
pObj->Release();
return hr;
}
HRESULT __stdcall CClassFactory::LockServer(BOOL fLock){
if(fLock)
nLocks++;
else
nLocks--;
return S_OK;
}
// main.cpp
//主要实现了几个COM对象标准的导出函数。
#include <objbase.h>
#include <olectl.h>
#include "CCopyHook.h"
//这是要添加到注册表中的项,注意如果你要使用这段代码,应该用UUIDGEN.exe生成一
//个新的CLSID。
const char* szRegTable={
{"CLSID\\{7e10a039-fe03-4f9c-b7e1-c5eeeaf53735}",0,"CopyHook"},
{"CLSID\\{7e10a039-fe03-4f9c-b7e1-c5eeeaf53735}\\InProcServer32",0,(const char*)-1},
{"CLSID\\{7e10a039-fe03-4f9c-b7e1-c5eeeaf53735}\\InProcServer32","ThreadingModel","Apartment"},
{"CLSID\\{7e10a039-fe03-4f9c-b7e1-c5eeeaf53735}\\ProgID",0,"webber84.CopyHook.1"},
{"webber84.CopyHook.1",0,"CopyHook"},
{"webber84.CopyHook.1\\CLSID",0,"{7e10a039-fe03-4f9c-b7e1-c5eeeaf53735}"}};
HMODULE hInstance=NULL;
LONG nLocks=0;
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
&