compress.cpp

来自「具有数据压缩和解压缩功能的地动态库。 采用Delphi内置的压缩库实现。压缩效」· C++ 代码 · 共 66 行

CPP
66
字号
#include "stdafx.h"
#include "CPPTest.h"

#include "Compress.h"
#include "AfxMT.h"

CSemaphore  Sema;

//**************************************************************************************
// next functions are used internally, 
//**************************************************************************************

typedef int __stdcall CompressBufferFun(char * InS, int IL, char * OutS, int * OL);
typedef int __stdcall DecompressBufferFun(char * InS, int IL, char * OutS, int * OL);

CompressBufferFun * DoCompressBuffer = NULL;
DecompressBufferFun * DoDecompressBuffer = NULL;

int InitCompressLib()
{
	HMODULE hDll = LoadLibrary("Compress.dll");
	if (hDll == NULL) 
		return -1;
	DoCompressBuffer = (CompressBufferFun *)GetProcAddress(hDll, "CompressBuffer");
	DoDecompressBuffer = (DecompressBufferFun *)GetProcAddress(hDll, "DecompressBuffer");
	if (DoCompressBuffer == NULL)
		return -2;
	return 1;
}

int CompressBuffer(char * InS, int InL, char * OutS, int * OutL)
{
	Sema.Lock();
	int r;
	if (DoCompressBuffer == NULL)
	{
		if (InitCompressLib() < 0)
		{
			//AfxMessageBox("InitCompressLib error");
			r = -1;
		}
	}
	else
		r = DoCompressBuffer(InS, InL, OutS, OutL);
	Sema.Unlock();
	return r;
}

int DecompressBuffer(char * InS, int InL, char * OutS, int * OutL)
{
	Sema.Lock();
	int r;
	if (DecompressBuffer == NULL)
	{
		if (InitCompressLib() < 0)
		{
			//AfxMessageBox("InitCompressLib error");
			r = -1;
		}
	}
	else
		r = DoDecompressBuffer(InS, InL, OutS, OutL);
	Sema.Unlock();
	return r;
}

⌨️ 快捷键说明

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