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

📄 ceuidldb.cpp

📁 有关win32应用程序编程和wince应用程序编程的很全面
💻 CPP
字号:
// CeUidlDB.cpp: implementation of the CeUidlDB class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "CeUidlDB.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CeUidlDB::CeUidlDB()
{

}

CeUidlDB::~CeUidlDB()
{

}

BOOL CeUidlDB::MountVolume(LPWSTR lpszVol)
{
	if(lpszVol == NULL)
	{
		CREATE_SYSTEMGUID(&m_ceguid);
	}
	else
	{
		if(CeMountDBVol(&m_ceguid,lpszVol,OPEN_ALWAYS) == FALSE)
			return FALSE;
	}
	return TRUE;
}

BOOL CeUidlDB::UnmountVolume()
{
	CloseHandle (m_hdb);
	BOOL res = CeUnmountDBVol(&m_ceguid);
	int id = GetLastError();
	return res;
}

BOOL CeUidlDB::CreateUidlDB(TCHAR* lpszName)
{
	CEOID g_oidDB = 0;	
	CEDBASEINFO dbm;

	dbm.dwFlags = CEDB_VALIDNAME|CEDB_VALIDTYPE|CEDB_VALIDSORTSPEC;
	dbm.dwDbaseType = UIDL_DATABASE_TYPE;
	dbm.wNumSortOrder = 1;
	dbm.rgSortSpecs[0].propid = UID_UIDL;
	dbm.rgSortSpecs[0].dwFlags = 0;
	

	lstrcpy(dbm.szDbaseName,lpszName);

	g_oidDB = CeCreateDatabaseEx(&m_ceguid,&dbm);

	if (g_oidDB == 0) {
		TCHAR szErr[128];
		wsprintf (szErr, TEXT ("Database create failed. \
			rc %d"), GetLastError());
		MessageBox (NULL, szErr, L"Error", MB_OK|MB_ICONERROR);
		return FALSE;
	}
	return TRUE;
}

BOOL CeUidlDB::OpenUidlDB(TCHAR *lpszName, CEPROPID proid)
{
	CEOID g_oidDB = 0;
	CloseHandle(m_hdb);
	m_hdb = CeOpenDatabaseEx(&m_ceguid,&g_oidDB,lpszName, UID_UIDL, 0, NULL);

	if (m_hdb == INVALID_HANDLE_VALUE)
	{
		DWORD Error = GetLastError();
		return FALSE;
	}
	return TRUE;
}

BOOL CeUidlDB::ReadDBRecord(TCHAR *uidl)
{
	WORD wProps;
    CEOID oid;
    PCEPROPVAL pRecord;
    PBYTE pBuff;
    DWORD dwRecSize;
    int i;
	pBuff = 0;
    
    oid = CeReadRecordProps (m_hdb, CEDB_ALLOWREALLOC, &wProps, NULL,
		&(LPBYTE)pBuff, &dwRecSize);

	if (oid == 0) 
        return 0;
	 
    pRecord = (PCEPROPVAL)pBuff;              
    
	//memset(&pData, 0 , sizeof(MailInfoDB)); 
    for (i = 0; i < wProps; i++) 
	{
        switch (pRecord->propid) {
        case UID_UIDL:
			lstrcpy(uidl, pRecord->val.lpwstr);
            break;
		default:
			break;
        }	
        pRecord++;
    }	
    LocalFree (pBuff);
    return TRUE;
}

BOOL CeUidlDB::WriteDBRecord(TCHAR *uidl)
{
	CEPROPVAL pRecPtr[1];
	pRecPtr[0].propid = UID_UIDL;
	pRecPtr[0].wFlags = 0;
	pRecPtr[0].val.lpwstr = uidl;
	
	CEOID oid= CeWriteRecordProps(m_hdb,0,1,pRecPtr);
	if(oid == 0)
	{
		int error = GetLastError();
		return FALSE;
	}
	
	return TRUE;
}

BOOL CeUidlDB::UidlExist(TCHAR *uidl)
{
	CEOID oid;
	DWORD dwIndex;
	CEPROPVAL property;
	
	// First seek to the start of the database.
	oid = CeSeekDatabase (m_hdb, CEDB_SEEK_BEGINNING, 0, &dwIndex);
	
	property.propid = UID_UIDL;            // Set property to search.
	property.wLenData = 0;                   // Not used but clear anyway.
	property.wFlags = 0;                     // No flags to set
	property.val.lpwstr = uidl;                 // Data for property
	
	oid = CeSeekDatabase (m_hdb, CEDB_SEEK_VALUEFIRSTEQUAL , (DWORD)(&property),&dwIndex);
	if (oid == 0) {
		return FALSE;
	}else
		return TRUE;
}

CEOID CeUidlDB::FindDatabase(TCHAR name[], DWORD kind)
{
	HANDLE hdb;
	CEOID id;
	CEOIDINFO imf;
	hdb = ::CeFindFirstDatabaseEx(&m_ceguid,kind);
	if(hdb != INVALID_HANDLE_VALUE)
	{
		id = ::CeFindNextDatabaseEx(hdb,&m_ceguid);
		while(id)
		{
			CeOidGetInfoEx(&m_ceguid,id,&imf);
			if(wcscmp(imf.infDatabase.szDbaseName,name)==0)
				return id;
			id = ::CeFindNextDatabaseEx(hdb,&m_ceguid);
		}
	}
	return NULL;
}

BOOL CeUidlDB::CloseDBHandle()
{
	return CloseHandle(m_hdb);
}

BOOL CeUidlDB::DeleteDBRecord(TCHAR *uidl)
{
	CEOID oid;
	DWORD dwIndex;
	CEPROPVAL property;
	
	// First seek to the start of the database.
	oid = CeSeekDatabase (m_hdb, CEDB_SEEK_BEGINNING, 0, &dwIndex);
	
	property.propid = UID_UIDL;            // Set property to search.
	property.wLenData = 0;                   // Not used but clear anyway.
	property.wFlags = 0;                     // No flags to set
	property.val.lpwstr = uidl;                 // Data for property
	
	oid = CeSeekDatabase (m_hdb, CEDB_SEEK_VALUEFIRSTEQUAL , (DWORD)(&property),&dwIndex);
	if (oid == 0) {
		return FALSE;
	}else
		return CeDeleteRecord(m_hdb,oid);
	return TRUE;
}

int CeUidlDB::GetDBRecordsNum(TCHAR *DBName)
{
	HANDLE hDBList;
	CEOID oidDB;
	CEOIDINFO dbinfo;
	hDBList = CeFindFirstDatabaseEx (&m_ceguid,UIDL_DATABASE_TYPE);
	if (hDBList != INVALID_HANDLE_VALUE) 
	{
		oidDB = CeFindNextDatabaseEx (hDBList,&m_ceguid);
		while (oidDB) 
		{			
			CeOidGetInfoEx(&m_ceguid,oidDB,&dbinfo);
			if(dbinfo.wObjType == OBJTYPE_DATABASE)
			{
				if(lstrcmp(dbinfo.infDatabase.szDbaseName,DBName) == 0)
					return dbinfo.infDatabase.wNumRecords;
			}
			oidDB = CeFindNextDatabaseEx (hDBList,&m_ceguid);
		}
		CloseHandle (hDBList);
	}
	return -1;
}

BOOL CeUidlDB::DeleteDB(TCHAR *DBName)
{
		CEOID id = NULL;
	id = this->FindDatabase(DBName,UIDL_DATABASE_TYPE);
	if(id == NULL)
		return FALSE;
	else
		return CeDeleteDatabaseEx(&m_ceguid,id);
}

⌨️ 快捷键说明

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