www.pudn.com > 播放mp3的控件.rar > module.cpp
#include "common.h" #include "player.h" #include "..\ESP\ElSound.h" #include "stream.h" #include#ifdef _DIRECTX #include #endif DWORD OLEInit; bool IsValidHandle(HANDLE handle) { try { return (((MPPlayer *) handle)->ModuleTag == 0x14581458); } catch (...) { return false; } } LPCTSTR NameString = "Wave Audio"; bool __declspec(dllexport) _stdcall ESGetName(char *buffer, unsigned long *buflen){ if ((!buffer) || (strlen(NameString) > *buflen - 1)) { *buflen = strlen(NameString); return false; }; strcpy(buffer, NameString); *buflen = strlen(NameString); return true; } LPCTSTR ExtsString = "*.wav"; bool __declspec(dllexport) _stdcall ESGetExts(char *buffer, unsigned long *buflen){ if ((!buffer) || (strlen(ExtsString) > *buflen - 1)) { *buflen = strlen(ExtsString); return false; }; strcpy(buffer, ExtsString); *buflen = strlen(ExtsString); return true; } const char *AboutString = "EldoS Wave Audio player (c) 1999 EldoS"; bool __declspec(dllexport) _stdcall ESGetAbout(char *buffer, unsigned long *buflen) { if ((!buffer) || (strlen(AboutString) > *buflen - 1)) { *buflen = strlen(AboutString); return false; }; strcpy(buffer, AboutString); *buflen = strlen(AboutString); return true; } long __declspec(dllexport) _stdcall ESGetVersion() { return 120; } bool __declspec(dllexport) _stdcall ESSetBuffers(HANDLE handle, unsigned long buffers, unsigned long size){ if (IsValidHandle(handle)) return ((MPPlayer *)handle)->SetAudioBuffers(buffers, size); else return false; } bool __declspec(dllexport) _stdcall ESSetLimits(HANDLE handle, unsigned long StartPos, unsigned long EndPos){ if (IsValidHandle(handle)) return ((MPPlayer *)handle)->SetLimits(StartPos, EndPos); else return false; } bool __declspec(dllexport) _stdcall ESSetPriority(HANDLE handle, long Priority) { if (IsValidHandle(handle)) return ((MPPlayer *)handle)->SetPriority(Priority); else return false; } unsigned long __declspec(dllexport) _stdcall ESGetPlayerMode(HANDLE handle) { if (IsValidHandle(handle)) { if (((MPPlayer *)handle)->FPlayerMode == pmStopped) { ((MPPlayer *)handle)->FPlayerMode = pmOpened; return pmStopped; } return (unsigned long)((MPPlayer *)handle)->FPlayerMode; } else return -1; } bool __declspec(dllexport) _stdcall ESSetInputName(HANDLE handle, char *Name) { if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->SetInName(Name); } else return false; } bool __declspec(dllexport) _stdcall ESSetOutputName(HANDLE handle, char *Name) { if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->SetOutName(Name); } else return false; } bool __declspec(dllexport) _stdcall ESSetInputMode(HANDLE handle, unsigned long InMode) { if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->SetInMode((esInputMode)InMode); } else return false; } bool __declspec(dllexport) _stdcall ESSetOutputMode(HANDLE handle, unsigned long OutMode) { if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->SetOutMode((esOutputMode)OutMode); } else return false; } bool __declspec(dllexport) _stdcall ESSetOutputDev(HANDLE handle, unsigned long DevNum) { if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->SetOutputDevice(DevNum); } else return false; } long __declspec(dllexport) _stdcall ESLastError(HANDLE handle){ if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->ESGetLastError(); } else return -1; } bool __declspec(dllexport) _stdcall ESDeInitModule(HANDLE handle) { if (IsValidHandle(handle)) { delete (MPPlayer *)handle; #ifdef _DIRECTX if (OLEInit) { CoUninitialize(); OLEInit--; } #endif return true; } else return false; } HANDLE __declspec(dllexport) _stdcall ESInitModule(){ try { HANDLE res = new MPPlayer(); #ifdef _DIRECTX if (res) { if (!OLEInit) { HRESULT hr = CoInitialize(NULL); if ((hr != E_INVALIDARG) && (hr != E_OUTOFMEMORY) && (hr != E_UNEXPECTED)) OLEInit++; else { delete (MPPlayer *) res; return 0; } } } #endif return res; } catch (...) { return 0; } } bool __declspec(dllexport) _stdcall ESOpen(HANDLE handle){ if (!IsValidHandle(handle)) return false; else return ((MPPlayer *)handle)->Open(); } bool __declspec(dllexport) _stdcall ESInitStream(HANDLE handle){ if (!IsValidHandle(handle)) return false; else return ((MPPlayer *)handle)->InitStream(); } bool __declspec(dllexport) _stdcall ESClose(HANDLE handle) { if (!IsValidHandle(handle)) return false; else return ((MPPlayer *)handle)->Close(); } bool __declspec(dllexport) _stdcall ESPlay(HANDLE handle) { if (!IsValidHandle(handle)) return false; else return ((MPPlayer *)handle)->Play(); } bool __declspec(dllexport) _stdcall ESStop(HANDLE handle) { if (!IsValidHandle(handle)) return false; else return ((MPPlayer *)handle)->Stop(); } bool __declspec(dllexport) _stdcall ESPause(HANDLE handle) { if (!IsValidHandle(handle)) return false; else return ((MPPlayer *)handle)->Pause(); } bool __declspec(dllexport) _stdcall ESResume(HANDLE handle) { if (!IsValidHandle(handle)) return false; else return ((MPPlayer *)handle)->Resume(); } unsigned long __declspec(dllexport) _stdcall ESGetSize(HANDLE handle){ if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->GetSize(); } else return -1; } bool __declspec(dllexport) _stdcall ESCanSetPos(HANDLE handle){ if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->CanSetPos(); } else return false; } unsigned long __declspec(dllexport) _stdcall ESGetPos(HANDLE handle){ if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->GetPos(); } else return -1; } bool __declspec(dllexport) _stdcall ESSetPos(HANDLE handle, unsigned long NewPos){ if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->SetPos(NewPos); } else return false; } bool __declspec(dllexport) _stdcall ESSetInCB(HANDLE handle, InFileOpenCB openCB, InFileCloseCB closeCB, InFileGetSizeCB getsizeCB, InFileSeekCB seekCB, InFileReadCB readCB, unsigned long UserData1){ if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->SetInCB(openCB, closeCB, getsizeCB, seekCB, readCB, UserData1); } else return false; } bool __declspec(dllexport) _stdcall ESSetOutCB(HANDLE handle, WaveOutCB OutCB, WaveOutActionCB OutActionCB, unsigned long UserData) { if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->SetOutCB(OutCB, OutActionCB, UserData); } else return false; } bool __declspec(dllexport) _stdcall ESGetInfo2(HANDLE handle, unsigned long *Info2) { if (IsValidHandle(handle)) { if (((MPPlayer *)handle)->PlayerMode() > pmClosed) { *Info2 = 0; return true; } else { LastError = peIncorrectMode; Info2 = 0; return false; } } else { Info2 = 0; return false; } } bool __declspec(dllexport) _stdcall ESGetInfo1(HANDLE handle, void *InfoBuf, unsigned long *buflen) { MPInfo *Buf = (MPInfo *)InfoBuf; if (IsValidHandle(handle)) { if ((!InfoBuf) || (*buflen < sizeof(MPInfo))) { *buflen = sizeof(MPInfo); LastError = peNoError; return false; } if (((MPPlayer *)handle)->PlayerMode() < pmReady) { *buflen = sizeof(MPInfo); LastError = peIncorrectMode; return false; } Buf->bitspersample = Args->AudioBits; Buf->frequency = Args->SampleRate; Buf->stereo = Args->Channels; *buflen = sizeof(MPInfo); return true; } else return false; } bool __declspec(dllexport) _stdcall ESCanPause(HANDLE handle) { return IsValidHandle(handle); } bool __declspec(dllexport) _stdcall ESSetVolume(HANDLE handle, unsigned long Volume){ if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->SetVolume(Volume); } else { return false; } } bool __declspec(dllexport) _stdcall ESGetVolume(HANDLE handle, unsigned long *Volume){ if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->GetVolume(Volume); } else { return false; } } bool __declspec(dllexport) _stdcall ESCanSetVolume(HANDLE handle, bool *Separate) { if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->CanSetVolume(Separate); } else { return false; } } bool __declspec(dllexport) _stdcall ESSetDevNum(HANDLE handle, unsigned long DevNum) { if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->SetDevNum(DevNum); } else { return false; } } bool __declspec(dllexport) _stdcall ESSetWindow(HANDLE handle, HWND Wnd) { if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->SetWindow(Wnd); } else { return false; } } bool __declspec(dllexport) _stdcall ESSetExtras(HANDLE handle, void *Param) { return IsValidHandle(handle); } bool __declspec(dllexport) _stdcall ESUseOutCB(HANDLE handle, bool UseCB) { if (IsValidHandle(handle)) { return ((MPPlayer *)handle)->UseOutCB(UseCB); } else { return false; } } bool __declspec(dllexport) _stdcall ESHasEQ(HANDLE handle, bool *ItDoes) { return false; } bool __declspec(dllexport) _stdcall ESEQ(HANDLE handle, LPVOID *EQData, unsigned long *channels, unsigned long *bands){ LastError = peNotImplemented; return false; } bool __declspec(dllexport) _stdcall ESUseEQ(HANDLE handle, bool UseEQ) { LastError = peNotImplemented; return false; }