zoukankan      html  css  js  c++  java
  • A simple class to play sound on netcf (part 2)

    在实际测试中发现上一片文章(A simple class to play sound on netcf)中介绍的播放声音的类在pda中运行正常,但却无法在pc中工作,简单分析了一下原因,发现是dll的问题,pc和pda播放声音时用的dll不同。pc中是winmm,而pda中则是coredll,项目需要在pc和pda上都可以运行,因此加入了动态判断功能,识别程序运行在pc还是pda中,从而加载不同的dll来播放声音,下面对是该类的一个封装:

    using System;
    using System.Collections.Generic;
    using System.Text;
    using 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/* don't stop any currently playing sound */
                SND_NOWAIT 
    = 0x00002000/* don't 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/* don't stop any currently playing sound */
                SND_NOWAIT 
    = 0x00002000/* don't 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); 
                }

            }

        }


    }



  • 相关阅读:
    BZOJ 1014 火星人prefix
    BZOJ 1013 球形空间产生器
    BZOJ 1012 最大数
    BZOJ 1011 遥远的行星
    BZOJ 1010 玩具装箱
    BZOJ 1009 GT考试
    BZOJ 1008 越狱
    BZOJ 1007 水平可见直线
    BZOJ 1006 神奇的国度
    Luogu 1450 [HAOI2008]硬币购物
  • 原文地址:https://www.cnblogs.com/swnuwangyun/p/556822.html
Copyright © 2011-2022 走看看