📄 accessmdb.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 + -