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

📄 globalvar.cpp

📁 用于误码仪测试
💻 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 + -