Announcement

Collapse
No announcement yet.

mciSendString API-Funktion Problem mit string

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • mciSendString API-Funktion Problem mit string

    Ich habe ein Beispiel mit mciSendString und wollte dieses ausbauen damit die Länge der geöffneten Datei zurückgegeben wird. Dazu wird die Zahl als String zurückgegeben. Nun kommt einfach der bei der Initialisierung angegebene String, die Funktion erwartet ihn als Parameter aber schreibt anscheinend nichts hinein!? Hier der Code (Ausschnitte):

    Code:
    public bool Stop()  //Das funktioniert
                {
                    bool ret = false;
                    if (mciSendString(string.Format("stop {0}", this._Alias), string.Empty, 0, IntPtr.Zero) == 0)
                    {
                        ret = mciSendString(string.Format("close {0}", this._Alias), string.Empty, 0, IntPtr.Zero) == 0;
                    }
                    return ret;
                }
    
                public string GetLength()  //Hier meine Funktion welche nicht
                                                          //funktioniert. Auf Überprüfung des
                                                        // Rückgabewertes habe ich vorerst verzichtet.
                {
                    string length = "";
                    
                    mciSendString(string.Format("status {0} ", this._Alias+ " length"), length, 255, IntPtr.Zero);
                    
                    return length.ToString();
                   
                }
                [DllImport("winmm.dll")]
                private static extern int mciSendString(string lpCommand, string lpReturn, int nReturnLength, IntPtr callBack);
                
    
                [DllImport("kernel32")]
                private static extern int GetShortPathName(string lpLongPath, StringBuilder lpShortPath, int Buffer);
            }
        }

  • #2
    Hallo,

    die DLLImport-Deklaration ist falsch, denn die String-Klasse im immutable und daher als Rückgabeparameter nicht geeignet. Die StringBuilder-Klasse ist an dieser Stelle flexibler:

    Code:
    [DllImport(“winmm.dll”, EntryPoint = “mciSendStringA”, 
               CharSet = CharSet.Ansi)]
    private static extern int MciSendString(
        string lpszCommand, StringBuilder lpszReturnString, 
        int cchReturn, IntPtr hwndCallback);

    Comment


    • #3
      Vielen Dank; ich habe diese Deklaration zu ändern versucht, aber da streiken die anderen Methoden der Klasse leider. Ist es möglich diese Deklaration explizit nur in einer Methode zu verwenden?

      Comment


      • #4
        Hallo,

        der Name der deklarierten Methode kann frei gewählt werden, solange die Zeichenfolge von EntryPoint korrekt ist. Siehe dazu auch http://msdn2.microsoft.com/de-de/lib...nt(VS.80).aspx

        Comment


        • #5
          Vielen Dank, habe es geschafft, habe nun einen Balken um die Position anzuzeigen und zu wählen welcher jede Sekunde aktualisiert wird.

          Comment

          Working...
          X