📄 globalvar.cpp
字号:
// GlobalVar.cpp: implementation of the CGlobalVar class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Test4G.h"
#include "GlobalVar.h"
#include <ole2.h>
#include <comdef.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
static char _szDllRegSvr[] = "DllRegisterServer";
static char _szDllUnregSvr[] = "DllUnregisterServer";
CGlobalVar::CGlobalVar()
{
}
CGlobalVar::~CGlobalVar()
{
}
BOOL CGlobalVar::CheckResourceEixst(CString strActiveFilePathName)
{
CFileFind fn;
if(fn.FindFile(strActiveFilePathName))
return TRUE;
else
return FALSE;
}
LONG CGlobalVar::GetDataFromRes(LPCSTR lpszFilePath, UINT nIDResource, LPSTR ResourceType)
{
// 将资源ID转成资源名称
LPSTR szResourceName = MAKEINTRESOURCE(LOWORD(nIDResource));
// 资源的类型
LPSTR szResourceType = ResourceType;
// 查找资源句柄
HRSRC hRes = FindResource(NULL, szResourceName,szResourceType);
// 获得资源数据的句柄
HGLOBAL hResData;
if (!hRes || !(hResData = LoadResource(NULL,hRes)))
{
return -1;
};
// 资源数据的大小
DWORD dwSize = SizeofResource(NULL,hRes);
// 资源加锁
PBYTE pSrc = (PBYTE)LockResource(hResData);
if (!pSrc)
{
FreeResource(hResData);
return -1;
};
PBYTE pData = new BYTE [dwSize];
if(pData == NULL)
{
FreeResource(hResData);
return -1;
}
// 复制数据
CopyMemory(pData,pSrc,dwSize);
// 释放资源
FreeResource(hResData);
MakeFileFromData(pData,dwSize,lpszFilePath);
return dwSize;
}
BOOL CGlobalVar::MakeFileFromData(PBYTE pData, LONG lSize, LPCSTR lpszFilePath)
{
if(pData == NULL || lpszFilePath == NULL || lpszFilePath[0] == '\0')
return FALSE;
HANDLE hFile = CreateFile(
lpszFilePath,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if(hFile == INVALID_HANDLE_VALUE)
{
return FALSE;
}
DWORD dwWrited = 0;
BOOL bRet = WriteFile(hFile,pData,lSize,&dwWrited,NULL);
CloseHandle(hFile);
return bRet;
}
bool CGlobalVar::RegisterOLE(CString pszDllName, CString pszDllEntryPoint)
{
bool bReturn = false;
// Load the library.
HINSTANCE hLib = LoadLibraryEx(pszDllName, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
TCHAR szError[12];
if (hLib < (HINSTANCE)HINSTANCE_ERROR) {
wsprintf(szError, _T("0x%08lx"), GetLastError());
DisplayMessage(IDS_LOADLIBFAILED, pszDllName, szError);
goto CleanupOle;
}
// Find the entry point.
FARPROC lpDllEntryPoint;
(FARPROC&)lpDllEntryPoint = GetProcAddress(hLib, pszDllEntryPoint);
if (lpDllEntryPoint == NULL) {
wsprintf(szError, _T("0x%08lx"), GetLastError());
DisplayMessage(IDS_GETPROCADDRESS, pszDllName, szError);
goto CleanupLibrary;
}
// Call the entry point.
if (lpDllEntryPoint)
{
if(Error((*lpDllEntryPoint)()) )
goto CleanupLibrary;
}
DisplayMessage(IDS_CALLSUCCEEDED, pszDllName, pszDllEntryPoint);
//Horray
bReturn = true;
CleanupLibrary:
FreeLibrary(hLib);
CleanupOle:
OleUninitialize();
return bReturn;
}
void CGlobalVar::DisplayMessage(UINT a, LPCSTR b, LPCSTR c)
{
CString string, string2;
string.LoadString(a);
string2.Format(string,b,c);
AfxMessageBox(string2);
}
bool CGlobalVar::Error(HRESULT hRes)
{
if(FAILED(hRes))
{
_com_error e(hRes);
AfxMessageBox(e.ErrorMessage(), MB_ICONEXCLAMATION );
return true;
}
return false;
}
void CGlobalVar::RegisterControl(CString strFilePathName)
{
RegisterOLE(strFilePathName,_szDllRegSvr);
}
void CGlobalVar::UnRegisterControl(CString strFilePathName)
{
RegisterOLE(strFilePathName,_szDllUnregSvr);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -