Avatar billede koppelgaard Praktikant
10. september 2007 - 14:59 Der er 20 kommentarer og
1 løsning

Afspille .vaw

Har fundet følgende kode til at afspille lyd med.
For imidlertid fejlen :
Unable to load DLL 'CoreDll.DLL': Det angivne modul blev ikke fundet. (Exception from HRESULT: 0x8007007E)

Har downloaded den men ved ikke hvor den skal ligge.
Lagde den under system32 uden held

Er der en der kan hjælpe.

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows.Forms;


namespace Pyknometer
{
    public class Sound
    {
        private byte[] m_soundBytes;
        private string m_fileName;

        private enum Flags
        {
            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.DLL", EntryPoint = "PlaySound", SetLastError = true)]
        private extern static int WCE_PlaySound(string szSound, IntPtr hMod, int flags);

        [DllImport("CoreDll.DLL", EntryPoint = "PlaySound", SetLastError = true)]
        private extern static int WCE_PlaySoundBytes(byte[] szSound, IntPtr hMod, int flags);

        /// <summary>
        /// Construct the Sound object to play sound data from the specified file.
        /// </summary>
        public Sound(string fileName)
        {
            m_fileName = fileName;
        }
        public Sound()
        {
       
        }

        /// <summary>
        /// Construct the Sound object to play sound data from the specified stream.
        /// </summary>
        public Sound(Stream stream)
        {
            // read the data from the stream
            m_soundBytes = new byte[stream.Length];
            stream.Read(m_soundBytes, 0, (int)stream.Length);
        }

        /// <summary>
        /// Play the sound
        /// </summary>
        public void Play()
        {
            // if a file name has been registered, call WCE_PlaySound,
            //  otherwise call WCE_PlaySoundBytes
            if (m_fileName != null)
                WCE_PlaySound(m_fileName, IntPtr.Zero, (int)(Flags.SND_ASYNC | Flags.SND_FILENAME));
            else
                WCE_PlaySoundBytes(m_soundBytes, IntPtr.Zero, (int)(Flags.SND_ASYNC | Flags.SND_MEMORY));
        }
    }
}
Avatar billede nielle Nybegynder
10. september 2007 - 15:09 #1
Er det CoreDll.DLL filen du har lagt ind under system32?

Dette er i hvert fald ikke nok til at man kan bruge det. Der burde være en beskrivelse af hva du skal gøre for at få det hele til at virke, men en ting du kan gøre er at starte RegSvr32.exe og bruge denne til at registrere dll'en med.
Avatar billede koppelgaard Praktikant
10. september 2007 - 15:17 #2
er det under kommandolinien man gøre det ?
Avatar billede nielle Nybegynder
10. september 2007 - 15:45 #3
1) En mulighed er at du bruger stifinder til finde CoreDll.DLL filen.
2) Derefter højre klikker du på den, hvorved der kommer en contekst menu frem.
3) I denne vælger du åben med.
4) Vælg det nederste punkt i den nye menu - noget med Vælg program.
5) Find så frem til regsvr32.dll (den likker i C:\windoes\system32).
6) Brug regsvr32.dll til at "åbne" din DLL - dtette burede registrere den.
Avatar billede koppelgaard Praktikant
10. september 2007 - 15:58 #4
Når jeg gør som beskrevet får jeg fejlen
loadLibrary(”c\windows\system32\coreddl.ddl”) mislykkedes. Det angivne modul findes ikke
Michael
Avatar billede koppelgaard Praktikant
10. september 2007 - 16:20 #5
Jeg tror der er noget galt med min coreddl.ddl
jeg har nu prøvet regsvr32.exe c:\WINDOWS\system32\coredll.dll
og her får jeg samme fejl.
Har du evt coreddl.dll
Avatar billede nielle Nybegynder
10. september 2007 - 16:22 #6
Nope, jeg aner ikke hvad det er for en. Den lyder faktisk ikke til at være en af Windows standard-DLL'er.
Avatar billede koppelgaard Praktikant
10. september 2007 - 16:48 #7
Avatar billede nielle Nybegynder
10. september 2007 - 18:49 #8
Så vidt jeg kan læse af teksten er CoreDLL.dll en Windows CE fil. Den kan ikke bruges på en almindelig Windows platform.
Avatar billede nielle Nybegynder
10. september 2007 - 19:04 #9
Under en almindelig Windows bruges en anden dll til formålet:

using System;
using System.Runtime.InteropServices;

namespace e795653
{
    class Program
    {
        [DllImport("winmm.dll")]
        public static extern bool PlaySound(string pszSound, int hmod, int fdwSound);

        public const int SND_FILENAME = 0x00020000;
        public const int SND_ASYNC = 0x0001;

        static void Main(string[] args)
        {
            PlaySound("BELLS.WAV", 0, SND_FILENAME | SND_ASYNC);

            Console.Write("Tryk en tast...");
            Console.ReadLine();
        }
    }
}
Avatar billede koppelgaard Praktikant
10. september 2007 - 22:16 #10
Det ser fint ud.
Men hvor skal bells.wav ligge?
Der kommer nemlig nogen lyd når jeg kører koden.
Nok fordi jeg ikke har den pågældende fil.

Kan man i øvrigt få lov til at angive en sti til lydfiler ?

Michael
Avatar billede koppelgaard Praktikant
10. september 2007 - 22:28 #11
Ok jeg fandt selv ud af det :

C:\WINDOWS\Media\

Ved du om man kan få lov til at ændre denne sti.

Og det er sidste spørgsmål, så skal du nok få point !

Michael
Avatar billede nielle Nybegynder
10. september 2007 - 22:30 #12
bells skal åbenbart blot være registreret af systemet på en eller anden måde.

Hvis du bruger 2.0 har du også en anden metode - se i bunden:

http://www.pinvoke.net/default.aspx/winmm/PlaySound.html?diff=y

Der kan du angive en sti som du ønsker det.
Avatar billede nielle Nybegynder
10. september 2007 - 22:33 #13
Umiddelbart vil jeg gætte på at PlaySound() sagtens kan bruges sammen med at du angiver den fulde stil til din fil.
Avatar billede koppelgaard Praktikant
11. september 2007 - 08:46 #14
Nu fandt jeg selv at SND_FILENAME er brug et filnavn. = jeg kan angive et navn?
SND_ASYNC spil asymkront= uafh af andre events ?

og nullet ?
Avatar billede nielle Nybegynder
11. september 2007 - 09:28 #15
Pladsen hvor 0'et står bruges til at angive en pointer (et handle) til en fil hvor at lyden ligger som en embedded resource.

I dette tilfælde kalder du dog lyd-filen direkte fra filsystemet og derfor er der ingen resoourcefil involveret - derfor 0.

Reference:

http://msdn2.microsoft.com/en-us/library/ms712879.aspx

> jeg kan angive et navn?

Ja. I den viste kode er filnavnet hardkodet, men du kan selvfølgelig også angive det via en variabel.

> uafh af andre events

Det kan man godt sige. Essensielt sker der det at lyden bare bliver spillet og at PlaySound() ikke står og venter på at dette gøres færdig.

Har du forresten kigget på SoundPlayer-klassen som er nævnt nederst i linket i 10/09-2007 22:30:46?
Avatar billede koppelgaard Praktikant
11. september 2007 - 11:22 #16
Det her jeg nu.
Så blev jeg lidt klogere.
Du har været til stor hjælp!

Kan flagværdierne adderes ?

Og kan  man spille andet end wav?

Og tror du ikke at du snart skulle have point?
Eller bliver jeg jo bare ved med at spørge:-)
Avatar billede nielle Nybegynder
11. september 2007 - 11:32 #17
Flagværdierne kan godt adderes, men man plejer nu at OR'e dem sammen som i:

SND_FILENAME | SND_ASYNC

Jeg ved ikke om du kan afspille f.eks. midi- eller mp3-filer, men det er jo sådan set bare at prøve efter. :^)

Jeg kan da godt smide et svar sådan at du kan give point.

... med det betyder nu altså ikke at du ikke må spørge mere her - det har jeg det fint med :^)
Avatar billede koppelgaard Praktikant
11. september 2007 - 15:17 #18
Ved du hvad: det synes jeg lyder fint!
Jeg har prøvet wma uden held.  )-:~
Avatar billede nielle Nybegynder
11. september 2007 - 15:59 #19
Tja, det der unægtelig ud til at det kun er for wav-filer.

En anden måde at afspille lyd (og video) kunne være at bruge Process-klassen til formålet. På dan måde kan man nemlig bede operativsystemet om selv at finde den relevante player. Uheldigvis ville det så betyde at Windows Media Player bliver åbnet (selv om man selvfølgeligt efterfølgende kan gøre den "usynlig").
Avatar billede koppelgaard Praktikant
12. september 2007 - 07:52 #20
Nå det man man også!
Tjaa man kan vist stort set alt.
Jeg fandt et program, der kan konvertere mine filer.
Desværre ikke freeware.
Kender du tilfældigvis et freeware?
Avatar billede nielle Nybegynder
12. september 2007 - 17:04 #21
Æhhe, nej.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester