/*

 * $Id: SwishCtl.cpp,v 1.3 2003/06/04 11:08:12 augur Exp $

 *

 * SwishCtl - SWISH-E API ActiveX Control

 * Copyright (c) 2003 Peoples Resource Centre Wellington NZ

 *

 * This program is free software; you can redistribute it and/or modify

 * it under the terms of the GNU General Public License as published by

 * the Free Software Foundation; either version 2 of the License, or

 * (at your option) any later version.

 *

 * This program is distributed in the hope that it will be useful,

 * but WITHOUT ANY WARRANTY; without even the implied warranty of

 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

 * GNU General Public License for more details.

 *

 * You should have received a copy of the GNU General Public License

 * along with this program; if not, write to the Free Software

 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

 */



// SwishCtl.cpp : Implementation of DLL Exports.





// Note: Proxy/Stub Information

//      To build a separate proxy/stub DLL, 

//      run nmake -f SwishCtlps.mk in the project directory.



#include "stdafx.h"

#include "resource.h"

#include <initguid.h>

#include "SwishCtl.h"



#include "SwishCtl_i.c"

#include "swish-e.h"



#include "CSwishCtl.h"



CComModule _Module;



BEGIN_OBJECT_MAP(ObjectMap)

OBJECT_ENTRY(CLSID_CSwishCtl, CCSwishCtl)

END_OBJECT_MAP()





bool GetModulePath(char filename[ _MAX_PATH ])

{

		

	DWORD result = GetModuleFileName( _Module.m_hInst, filename,  _MAX_PATH );

	if ( result > 0 ) {

		char drive [_MAX_DIR ];	

		char dir [_MAX_PATH ];	

		_splitpath( filename, drive, dir, NULL, NULL);

		_makepath( filename, drive, dir, NULL, NULL );

		return true;

	}

	return false;

}



/////////////////////////////////////////////////////////////////////////////

// DLL Entry Point



extern "C"

BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/)

{

    if (dwReason == DLL_PROCESS_ATTACH)

    {

        _Module.Init(ObjectMap, hInstance, &LIBID_SWISHCTLLib);

        DisableThreadLibraryCalls(hInstance);

    }

    else if (dwReason == DLL_PROCESS_DETACH)

        _Module.Term();

    return TRUE;    // ok

}



/////////////////////////////////////////////////////////////////////////////

// Used to determine whether the DLL can be unloaded by OLE



STDAPI DllCanUnloadNow(void)

{

    return (_Module.GetLockCount()==0) ? S_OK : S_FALSE;

}



/////////////////////////////////////////////////////////////////////////////

// Returns a class factory to create an object of the requested type



STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv)

{

    return _Module.GetClassObject(rclsid, riid, ppv);

}



/////////////////////////////////////////////////////////////////////////////

// DllRegisterServer - Adds entries to the system registry



STDAPI DllRegisterServer(void)

{

    // registers object, typelib and all interfaces in typelib



    return _Module.RegisterServer(TRUE);

}



/////////////////////////////////////////////////////////////////////////////

// DllUnregisterServer - Removes entries from the system registry



STDAPI DllUnregisterServer(void)

{

    return _Module.UnregisterServer(TRUE);

}





