MAIN.CPP (BROWSEH OLE Sample)
/*************************************************************************
-
- OLE Automation TypeLibrary Browse Helper Sample
-
- main.cpp
-
- new and delete operator redefinition to use memory manager of calling
- task.
- LibMain, WEP, DllGetClassObject, DllCanUnloadNow, DLL initialization.
- Procedure to create standard dispatch implementation.
-
- Written by Microsoft Product Support Services, Windows Developer Support
- (c) Copyright Microsoft Corp. 1994 All Rights Reserved
-
- ***********************************************************************/
#include <windows.h>
#include <windowsx.h>
#ifdef WIN16
#include <ole2.h>
#include <compobj.h>
#include <dispatch.h>
#include <variant.h>
#include <olenls.h>
#endif
#include <initguid.h>
#include "browseh.h"
// Globals
HINSTANCE g_hinst; // Instance of application
//Count number of objects and number of
locks.
ULONG g_cObj=0;
ULONG g_cLock=0;
// String resource buffers
TCHAR g_szServerName[STR_LEN];
/*
* new
*
* Purpose:
* Since this is an InProcServer object, the memory allocator used by
* the calling task must be used.
* This is done by redefining the global new operator and using new
* for all memory allocations.
*/
- oid FAR* operator new(size_t size)
{
IMalloc FAR* pMalloc;
LPVOID lpv;
if (CoGetMalloc(MEMCTX_TASK, &pMalloc) == NOERROR)
{
lpv = pMalloc->Alloc(size);
pMalloc->Release();
return lpv;
}
return NULL;
}
/*
* delete
*
* Purpose:
* Use the memory manager of the calling task to free memory.
*/
- oid operator delete(void FAR* lpv)
{
IMalloc FAR* pMalloc;
if (lpv == NULL) return;
if( CoGetMalloc(MEMCTX_TASK, &pMalloc) == NOERROR)
{
if (pMalloc->DidAlloc(lpv))
pMalloc->Free(lpv);
pMalloc->Release();
}
}
#ifdef WIN16
/*
* LibMain
*
* Purpose:
* Called by Win16 on DLL load. Does any one-time initializations.
*
*/
int PASCAL LibMain (HINSTANCE hinst, WORD wDataSeg, WORD cbHeapSize, LPSTR
lpCmdLine)
{
if (cbHeapSize != 0)
UnlockData(0);
g_hinst = hinst;
if (!InitDLL(hinst))
return FALSE;
return TRUE;
}
/*
* WEP
*
* Purpose:
* Called by Windows on DLL unload.
*
*/
extern "C" void FAR PASCAL _WEP(int bSystemExit)
{
return;
}
#else //Win 32
BOOL WINAPI DllMain (HINSTANCE hinst, DWORD dwReason, LPVOID lpReserved)
{
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
if (!InitDLL(hinst))
return FALSE;
else return TRUE;
default:
return TRUE;
}
}
#endif
/*
* DLLGetClassObject
*
* Purpose:
* OLE calls this funtion to obtain the class factory. Note that the class
* factory is not registered by the inproc server.
*
*/
STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid,
LPVOID FAR *ppv)
{
LPCLASSFACTORY pcf;
HRESULT hr;
*ppv = NULL;
// Check if this CLSID is supported.
if (rclsid != CLSID_BrowseHelper)
return ResultFromScode(E_FAIL);
// Create class factory and return it
pcf = new CBrowseHelperCF;
if (!pcf)
return ResultFromScode(E_OUTOFMEMORY);
hr = pcf->QueryInterface(riid, ppv);
if (FAILED(hr))
{
delete pcf;
return hr;
}
return NOERROR;
}
/*
* DLLCanUnloadNow
*
* Purpose:
* DllCanUnloadNow is called by OLE to determine if the DLL can be unloded.
*
*/
STDAPI DllCanUnloadNow(void)
{
if (g_cObj==0L && g_cLock==0L)
return ResultFromScode(S_OK);
else return ResultFromScode(S_FALSE);
}
/*
* InitDLL
*
* Purpose:
* Load strings & Registers the window class
*
* Parameters:
* hinstance hinstance of application
*
*/
BOOL InitDLL (HINSTANCE hinst)
{
return LoadString(hinst, IDS_SERVERNAME, g_szServerName,
sizeof(g_szServerName));
}
- Software for developers
-
Delphi Components
.Net Components
Software for Android Developers
- More information resources
-
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
- Databases for Amazon shops developers
-
Amazon Categories Database
Browse Nodes Database