A class to play Sound on Netcf in Csharp (2)

xiaoxiao2021-04-05  255

In the actual test, it was found that the class introduced in a class to play sound on netcf in csharp was normal, but it could not work in the PC, simply analyze the reason, and found that it is a DLL. The problem, the DLL used in the PC and PDA play the sound. The PC is Winmm, and the PDA is Coredll, and the project needs to be run on the PC and PDA. Therefore, the dynamic judgment function is added, and the identification program is running in the PC or the PDA, thereby loading different DLLs to play sound, below Pairing a package of this class:

Using system.collections.Generic; use system.Runtime.interopservices;

namespace MiniCafe.Util {internal class NetHelpers {[Flags] public enum PlaySoundFlags: int {SND_SYNC = 0x0000, / * play synchronously (default) * / SND_ASYNC = 0x0001, / * play asynchronously * / SND_NODEFAULT = 0x0002, / * silence (! default) if sound not found * / SND_MEMORY = 0x0004, / * pszSound points to a memory file * / SND_LOOP = 0x0008, / * loop the sound until next sndPlaySound * / SND_NOSTOP = 0x0010, / * do not stop any currently playing sound * / SND_NOWAIT = 0x00002000, / * do not wait if the driver is busy * / SND_ALIAS = 0x00010000, / * name is a registry alias * / SND_ALIAS_ID = 0x00110000, / * alias is a predefined ID * / SND_FILENAME = 0x00020000, / * Name is file name * / snd_resource = 0x00040004 / * name is resource name or atom * /}

[DllImport ( "winmm")] public static extern bool PlaySound (string szSound, IntPtr hMod, PlaySoundFlags flags);} internal class NetCFHelpers {[Flags] public enum PlaySoundFlags: int {SND_SYNC = 0x0000, / * play synchronously (default) * / SND_ASYNC = 0x0001, / * play asynchronously * / SND_NODEFAULT = 0x0002, / * silence (! default) if sound not found * / SND_MEMORY = 0x0004, / * pszSound points to a memory file * / SND_LOOP = 0x0008, / * loop the sound until next sndPlaySound * / SND_NOSTOP = 0x0010, / * do not stop any currently playing sound * / SND_NOWAIT = 0x00002000, / * do not wait if the driver is busy * / SND_ALIAS = 0x00010000, / * name is a registry alias * / SND_ALIAS_ID = 0x00110000, / * alias is a predefined ID * / SND_FILENAME = 0x00020000, / * name is file name * / snd_resource = 0x00040004 / * name is resource name or atom * /}

[DllImport ( "coredll")] public static extern bool PlaySound (string szSound, IntPtr hMod, PlaySoundFlags flags);} public class Sound {public static void Play (string strFileName) {if (Framework.IsNetCF) {// for pda NetCFHelpers .PlaySound (strFileName, IntPtr.Zero, NetCFHelpers.PlaySoundFlags.SND_FILENAME | NetCFHelpers.PlaySoundFlags.SND_ASYNC);} else {// for pc NetHelpers.PlaySound (strFileName, IntPtr.Zero, NetHelpers.PlaySoundFlags.SND_FILENAME | NetHelpers.PlaySoundFlags.SND_ASYNC }}}}

转载请注明原文地址:https://www.9cbs.com/read-132175.html

New Post(0)