| vbAccelerator - Contents of code file: lame-3.96_Dll_LameEncShim_LameEncShim.cThis file is part of the download Lame Encoder Shim Source, which is described in the article MP3 Encoding with LAME. /*
========================================================================
DYNAMIC LINK LIBRARY : LameEncShim
========================================================================
This provides a wrapper around the lame_enc.dll to enable it be
called from Visual Basic (or other languages which cannot make calls
to CDECL type DLL exports) under Win32.
Author: Steve McMahon (steve@vbaccelerator.com)
Website: http://vbaccelerator.com/
Date: 25 April 2004
Credits: Jon F. Zahornacky (jonzeke@yahoo.com) for ASPIShim from
which this was derived.
*/
#define STRICT
#include <windows.h>
#include "BladeMP3EncDll.h"
// This DLL and the Lame encoder's instance
HINSTANCE hInstLame = 0;
DWORD (*pfn_beInitStream) (PBE_CONFIG, PDWORD, PDWORD, PHBE_STREAM);
DWORD (*pfn_beCloseStream) (HBE_STREAM);
DWORD (*pfn_beEncodeChunk) (HBE_STREAM, DWORD, PSHORT, PBYTE, PDWORD);
DWORD (*pfn_beDeinitStream) (HBE_STREAM, PBYTE, PDWORD);
DWORD (*pfn_beWriteInfoTag) (HBE_STREAM, LPCSTR);
DWORD (*pfn_beWriteVBRHeader) (LPCSTR);
DWORD (*pfn_beVersion) (PBE_VERSION);
// Main Entry Point For DLL
BOOL WINAPI DllMain (HINSTANCE hInstA, DWORD dwReason, LPVOID lpvReserved)
{
switch (dwReason)
{
// dll is being loaded
case DLL_PROCESS_ATTACH:
// only load LAME_ENC lib once
if (!hInstLame)
{
// attach LAME_ENC
hInstLame = LoadLibrary("LAME_ENC");
if (hInstLame)
{
// Store address for ASPI calls
(FARPROC)pfn_beInitStream = GetProcAddress(hInstLame,
"beInitStream");
(FARPROC)pfn_beCloseStream = GetProcAddress(hInstLame,
"beCloseStream");
(FARPROC)pfn_beEncodeChunk = GetProcAddress(hInstLame,
"beEncodeChunk");
(FARPROC)pfn_beDeinitStream = GetProcAddress(hInstLame,
"beDeinitStream");
(FARPROC)pfn_beWriteInfoTag = GetProcAddress(hInstLame,
"beWriteInfoTag");
(FARPROC)pfn_beWriteVBRHeader = GetProcAddress(hInstLame,
"beWriteVBRHeader");
(FARPROC)pfn_beVersion = GetProcAddress(hInstLame, "beVersion");
}
}
break;
// thread create
case DLL_THREAD_ATTACH:
break;
// thread exiting (cleanly)
case DLL_THREAD_DETACH:
break;
// dll is being free'd
case DLL_PROCESS_DETACH:
FreeLibrary(hInstLame);
hInstLame = 0;
break;
} // switch
// always load
return TRUE;
}
BE_ERR __stdcall beInitStream(PBE_CONFIG pbeConfig, PDWORD dwSamples, PDWORD
dwBufferSize, PHBE_STREAM phbeStream)
{
return pfn_beInitStream(pbeConfig, dwSamples, dwBufferSize, phbeStream);
}
BE_ERR __stdcall beEncodeChunk(HBE_STREAM hbeStream, DWORD nSamples, PSHORT
pSamples, PBYTE pOutput, PDWORD pdwOutput)
{
return pfn_beEncodeChunk(hbeStream, nSamples, pSamples, pOutput, pdwOutput);
}
BE_ERR __stdcall beCloseStream(HBE_STREAM hbeStream)
{
return pfn_beCloseStream(hbeStream);
}
BE_ERR __stdcall beDeinitStream(HBE_STREAM hbeStream, PBYTE pOutput, PDWORD
pdwOutput)
{
return pfn_beDeinitStream(hbeStream, pOutput, pdwOutput);
}
BE_ERR __stdcall beWriteVBRHeader(LPCSTR lpszFileName)
{
return pfn_beWriteVBRHeader(lpszFileName);
}
BE_ERR __stdcall beWriteInfoTag(HBE_STREAM hbeStream, LPCSTR lpszFileName)
{
return pfn_beWriteInfoTag(hbeStream, lpszFileName);
}
BE_ERR __stdcall beVersion(PBE_VERSION pbeVersion)
{
return pfn_beVersion(pbeVersion);
}
| |||
|
|
||||