Avatar billede mikkel_sommer Nybegynder
24. februar 2007 - 02:10 Der er 8 kommentarer og
1 løsning

Fejl: Unbalanced stack

Hej eksperter

Jeg har fundet denne kode stump til at afspille en wav fil i min form:

using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;

namespace Timer
{
    public class WAVSounds
    {
        [DllImport("WinMM.dll")]
        public static extern bool PlaySound(byte[] wfname, int fuSound);

        //  flag values for SoundFlags argument on PlaySound
        public int SND_SYNC = 0x0000;      // play synchronously (default)
        public int SND_ASYNC = 0x0001;      // play asynchronously
        public int SND_NODEFAULT = 0x0002;      // silence (!default) if sound not found
        public int SND_MEMORY = 0x0004;      // pszSound points to a memory file
        public int SND_LOOP = 0x0008;      // loop the sound until next sndPlaySound
        public int SND_NOSTOP = 0x0010;      // don't stop any currently playing sound

        public int SND_NOWAIT = 0x00002000; // don't wait if the driver is busy
        public int SND_ALIAS = 0x00010000; // name is a Registry alias
        public int SND_ALIAS_ID = 0x00110000; // alias is a predefined ID
        public int SND_FILENAME = 0x00020000; // name is file name
        public int SND_RESOURCE = 0x00040004; // name is resource name or atom
        public int SND_PURGE = 0x0040;    // purge non-static events for task
        public int SND_APPLICATION = 0x0080;    // look for application specific association

        public void Play(string wfname, int SoundFlags)
        {
            byte[] bname = new Byte[256];    //Max path length
            bname = System.Text.Encoding.ASCII.GetBytes(wfname);
            PlaySound(bname, SoundFlags);
        }

        public void StopPlay()
        {
            PlaySound(null, SND_PURGE);
        }
    }
}

og jeg kalder play med dette:

string file = "C:\\Documents and Settings\\Mikkel Sommer\\Skrivebord\\1234.wav";
WAVSounds ws = new WAVSounds();
ws.Play(file, ws.SND_ASYNC);

Men når jeg kører det får jeg fgl. fejl, og ingen lyd bliver spillet:

A call to PInvoke function 'Timer!Timer.WAVSounds::PlaySound' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.

Det mest underlige er at hvis jeg indsætter et breakpoint ved PlaySound(bname, SoundFlags); og trykker f11 spilles lyden men ved f10 sker der ikke noget(som når jeg kører det uden breakpoint).

Håber der er nogen som kan hjælpe mig videre...
Avatar billede arne_v Ekspert
24. februar 2007 - 02:20 #1
[DllImport("WinMM.dll")]
        public static extern bool PlaySound(string pszSound, IntPtr hmod, int fdwSound   
);

og

        PlaySound(wfname, null, SND_FILENAME);

lyder umiddelbart mere rigtigt som jeg læse

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

PlaySound(bname, SoundFlags);
Avatar billede mikkel_sommer Nybegynder
25. februar 2007 - 23:18 #2
Så siger den at den ikke kan converte null til System.IntPtr
Avatar billede arne_v Ekspert
26. februar 2007 - 04:30 #3
så prøv med IntPtr.Zero
Avatar billede arne_v Ekspert
26. februar 2007 - 04:32 #4
eller

[DllImport("winmm.dll", EntryPoint="PlaySound")] public static extern int PlaySoundA(string lpszName, int hModule, int dwFlags)

og bare et godt gammeldags 0
Avatar billede mikkel_sommer Nybegynder
26. februar 2007 - 21:37 #5
Det virker stadig ikke, den kommer bare med den der windows lyd som når man har gjort noget man ikke kan/må ... :-(
Avatar billede mikkel_sommer Nybegynder
28. februar 2007 - 21:29 #6
ingen ideer?
Avatar billede arne_v Ekspert
01. marts 2007 - 02:51 #7
no
Avatar billede mikkel_sommer Nybegynder
01. marts 2007 - 23:56 #8
Hey arne ... min fejl, det virkede rent faktisk så smid et svar for veltjente points.

Og endnu en gang, mange tak for hjælpen.
Avatar billede arne_v Ekspert
02. marts 2007 - 00:46 #9
ok
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