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

📄 vbutil.cpp

📁 The code for this article was written for version 1.0 of the Active Template Library (ATL). The cu
💻 CPP
字号:
// VBUTIL.C - Example DLL for Visual Basic applications.

//@B VBUtil
#include "vbutil.h"

HINSTANCE hInst;

// This function is the library entry point. It's technically 
// optional for 32-bit programs, but you'll have more options later 
// if you define it. 

BOOL WINAPI DllMain(HINSTANCE hInstA, DWORD dwReason, LPVOID lpvReserved)
{
	switch (dwReason) {
	case DLL_PROCESS_ATTACH:
		// The DLL is being mapped into the process's address space
		// Do any additional initialization here
		hInst = hInstA;
	   	break;

	case DLL_THREAD_ATTACH:
		// A thread is being created
	    break;

	case DLL_THREAD_DETACH:
		// A thread is exiting cleanly
	    break;

	case DLL_PROCESS_DETACH:
		// The DLL is being unmapped from the process's address space
		// Do any additional cleanup here
		hInst = 0;
	    break;
	}

	return TRUE;
}
//@E VBUtil

// 16-bit version for comparison
#if 0
int PASCAL LibMain(HINSTANCE hInstA, WORD wDataSeg, 
				   WORD cbHeapSize, LPSTR lpCmdLine)
{
	if (cbHeapSize != 0)
		UnlockData(0);
	hInst = hInstA;

	// Do any additional 16-bit server initialization here
	
	return hInst;
}

int FAR PASCAL WEP(int bSystemExit)
{
	// Do any additional 16-bit server cleanup here
	hInst = 0;		
	return 1;
}            
#endif

//@B ErrorHandler
void ErrorHandler(Long e)
{
    DWORD err = 0;
    if (e >= 0) {        
        err = (DWORD)e;
    } else {
        err = HResultToErr(e);
    }
    SetLastError((DWORD)err);
}
//@E ErrorHandler

DWORD HResultToErr(Long e)
{
    ASSERT(e < 0);

    switch (e) {
    case E_INVALIDARG:
        return ERROR_INVALID_PARAMETER;
    case E_OUTOFMEMORY:
        return ERROR_NOT_ENOUGH_MEMORY;
    case DISP_E_BADINDEX:
        return ERROR_INVALID_INDEX;
    case DISP_E_TYPEMISMATCH:
        return ERROR_INVALID_DATATYPE;
    case DISP_E_EXCEPTION:
        return ERROR_EXCEPTION_IN_SERVICE;
    case DISP_E_BADVARTYPE:
        return ERROR_INVALID_DATATYPE;
    case DISP_E_ARRAYISLOCKED:
        return ERROR_LOCKED;
    case E_UNEXPECTED:
        return ERROR_INVALID_DATA;
    case DISP_E_OVERFLOW:
        return ERROR_ARITHMETIC_OVERFLOW;
    case E_ACCESSDENIED:
        return ERROR_ACCESS_DENIED;
    case E_POINTER:
        return ERROR_INVALID_ADDRESS;
    case E_HANDLE:
        return ERROR_INVALID_HANDLE;
    case E_ABORT:
        return ERROR_OPERATION_ABORTED;
    case E_FAIL:
        return ERROR_GEN_FAILURE;
    }
    return ERROR_INVALID_DATA;
}

⌨️ 快捷键说明

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