You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
107 lines
1.6 KiB
107 lines
1.6 KiB
#include "precomp.hpp"
|
|
|
|
#include "comtest.h"
|
|
#include "ComBase.hpp"
|
|
#include "HelloWorld.hpp"
|
|
|
|
#include <initguid.h>
|
|
#include "comtest_i.c"
|
|
|
|
HINSTANCE globalInstanceHandle = NULL;
|
|
LONG globalComponentCount = 0;
|
|
|
|
|
|
//
|
|
// DLL entrypoint
|
|
//
|
|
|
|
extern "C" BOOL WINAPI
|
|
DllMain(
|
|
HINSTANCE hInstance,
|
|
DWORD dwReason,
|
|
VOID* lpReserved
|
|
)
|
|
{
|
|
switch (dwReason)
|
|
{
|
|
case DLL_PROCESS_ATTACH:
|
|
|
|
DisableThreadLibraryCalls(hInstance);
|
|
globalInstanceHandle = hInstance;
|
|
break;
|
|
|
|
case DLL_PROCESS_DETACH:
|
|
|
|
break;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//
|
|
// Determine whether the DLL can be safely unloaded
|
|
//
|
|
|
|
STDAPI
|
|
DllCanUnloadNow()
|
|
{
|
|
return (globalComponentCount == 0) ? S_OK : S_FALSE;
|
|
}
|
|
|
|
|
|
//
|
|
// Return a class factory object
|
|
//
|
|
|
|
STDAPI
|
|
DllGetClassObject(
|
|
REFCLSID rclsid,
|
|
REFIID riid,
|
|
VOID** ppv
|
|
)
|
|
{
|
|
if (rclsid != CLSID_HelloWorld)
|
|
return CLASS_E_CLASSNOTAVAILABLE;
|
|
|
|
CHelloWorldFactory* factory = new CHelloWorldFactory();
|
|
|
|
if (factory == NULL)
|
|
return E_OUTOFMEMORY;
|
|
|
|
HRESULT hr = factory->QueryInterface(riid, ppv);
|
|
factory->Release();
|
|
|
|
return hr;
|
|
}
|
|
|
|
|
|
//
|
|
// Register our component
|
|
//
|
|
|
|
static const ComponentRegData compRegData =
|
|
{
|
|
&CLSID_HelloWorld,
|
|
L"Skeleton COM Component",
|
|
L"comtest.HelloWorld.1",
|
|
L"comtest.HelloWorld"
|
|
};
|
|
|
|
STDAPI
|
|
DllRegisterServer()
|
|
{
|
|
return RegisterComponent(compRegData, TRUE);
|
|
}
|
|
|
|
|
|
//
|
|
// Unregister our component
|
|
//
|
|
|
|
STDAPI
|
|
DllUnregisterServer()
|
|
{
|
|
return RegisterComponent(compRegData, FALSE);
|
|
}
|
|
|