⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 accessmdb.cpp

📁 访问数据的COM组件
💻 CPP
字号:
// AccessMdb.cpp : Defines the entry point for the DLL application.
//

#include <windows.h>
#include <comdef.h>
#include <stddef.h>
#include <stdio.h>
#include <assert.h>
#include <tchar.h>
#include <shlwapi.h>
#include "AccessMdb_i.h"
#include "ClassFactory.h"

long g_LockCount = 0;

static const TCHAR * g_RegTable[][3] = 
{
	{ TEXT("Whz数据库访问组件\\CLSID"), 0, TEXT("{F24FEFC8-A534-483d-9427-5EC0F137246B}") },
	{ TEXT("CLSID\\{F24FEFC8-A534-483d-9427-5EC0F137246B}\\ProgID"), 0, TEXT("Whz数据库访问组件") },
	{ TEXT("CLSID\\{F24FEFC8-A534-483d-9427-5EC0F137246B}\\InProcServer32"), 0, (LPCTSTR)-1 },
	{ TEXT("CLSID\\{F24FEFC8-A534-483d-9427-5EC0F137246B}\\InProcServer32"), TEXT("ThreadingModel"), TEXT("Apartment") },
	{ TEXT("Interface\\{5BD4E89C-B2E0-49b8-A5FE-D7416233CBDC}\\ProxyStubClsid32"), 0, TEXT("{00020424-0000-0000-C000-000000000046}") },
	{ TEXT("Interface\\{5BD4E89C-B2E0-49b8-A5FE-D7416233CBDC}\\TypeLib"), 0, TEXT("{D1B3A671-A5DD-4dfb-8D2C-85387A201C52}") },
	{ TEXT("TypeLib\\{D1B3A671-A5DD-4dfb-8D2C-85387A201C52}\\1.0\\0\\win32"), 0, (LPCTSTR)-1 }
};

static const TCHAR * g_UnregTable[] = 
{
	TEXT("Whz数据库访问组件"),
	TEXT("CLSID\\{F24FEFC8-A534-483d-9427-5EC0F137246B}"),
	TEXT("Interface\\{5BD4E89C-B2E0-49b8-A5FE-D7416233CBDC}"), 
	TEXT("TypeLib\\{D1B3A671-A5DD-4dfb-8D2C-85387A201C52}")
};


BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
					 )
{
	if (ul_reason_for_call == DLL_PROCESS_ATTACH)
	{
	}
	else if (ul_reason_for_call == DLL_PROCESS_DETACH)
	{
	}
    return TRUE;
}

STDAPI DllCanUnloadNow(void)
{
	if(g_LockCount == 0) 
		return S_OK ;
	else
		return S_FALSE ;
}

STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID FAR* ppv)
{
    if( rclsid ==  CLSID_ACCESSMDB )
	{
		static CAccessMdbClass s_amc;

		//CAccessMdbClass * pamc = new CAccessMdbClass;
		//if( pamc == NULL )
		//	return S_FALSE;
		HRESULT hr = s_amc.QueryInterface (riid, ppv) ;

		return hr;
	}
	else { 
		return CLASS_E_CLASSNOTAVAILABLE;
	}
}

STDAPI DllUnregisterServer(void) 
{
	HRESULT hr = S_OK;

	int nEntry = sizeof(g_UnregTable)/sizeof(*g_UnregTable);

	for( int i=nEntry-1; i>=0; i-- )
	{
		const TCHAR * pszKeyName = g_UnregTable[i];

		long err = SHDeleteKey(HKEY_CLASSES_ROOT, pszKeyName);

		if( err != ERROR_SUCCESS )
			hr = S_FALSE;
	}
	
	return hr;
}

STDAPI DllRegisterServer(void)
{
	HRESULT hr = S_OK;

	TCHAR szFileName[MAX_PATH];
	::GetModuleFileName( ::GetModuleHandle(TEXT("AccessMdb.dll")), 
		szFileName, MAX_PATH);

	int nEntry = sizeof(g_RegTable)/sizeof(*g_RegTable);

	for( int i=0; i<nEntry && SUCCEEDED(hr); i++ )
	{
		const TCHAR * pszKeyName = g_RegTable[i][0];
		const TCHAR * pszValName = g_RegTable[i][1];
		const TCHAR * pszValue   = g_RegTable[i][2];

		if( pszValue == (LPTSTR)-1 )
			pszValue = szFileName;

		HKEY hkey;
		long err = RegCreateKey(HKEY_CLASSES_ROOT, pszKeyName, &hkey);

		if( err == ERROR_SUCCESS )
		{
			err = RegSetValue(hkey, pszValName, REG_SZ, pszValue, strlen(pszValue)+1 );
			RegCloseKey(hkey);
		}

		if( err != ERROR_SUCCESS )
		{
			DllUnregisterServer();
			hr = S_FALSE;
		}
	}

	return hr;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -