dll oder MCI einbinden

Alles rund um die Programmierung mit Qt
Antworten
cybercow
Beiträge: 3
Registriert: 13. März 2007 18:47

dll oder MCI einbinden

Beitrag von cybercow »

Hi,

ich bin Anfänger in Sachen QT und überhaupt in C++.
Darum hoffe ich, dass mir jemand weiterhelfen kann.
Ich benötige eine Funktion, die mir das Format eines Videos (Avi und MPEG) wiedergibt. Damit meine ich die Höhe und die Breite.

Ich habe vorher mit vbscript gearbeitet. Darum habe ich mir mit Visual Basic eine dll kompiliert, die mittels MCI die Videohöhe und -breite bestimmt.
Hier mal der Code(vielen Dank an vb@rchiv.net):



Option Explicit

' Benötigte API-Deklarationen
Privat Declare Function mciSendString Lib "winmm.dll" _
Alias "mciSendStringA" ( _
ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, _
ByVal uReturnLength As Long, _
ByVal hwndCallback As Long) As Long

Privat Declare Function GetShortPathName Lib "kernel32" _
Alias "GetShortPathNameA" ( _
ByVal lpszLongPath As String, _
ByVal lpszShortPath As String, _
ByVal cchBuffer As Long) As Long



' Multimedia-Datei öffnen
Public Sub VideoOpen(ByVal sFile As String)

Dim sBuffer As String * 255
Dim sType As String
Dim nResult As Long
Dim sExt As String

On Error Resume Next

' kurzen Dateinamen ermitteln
nResult = GetShortPathName(sFile, sBuffer, Len(sBuffer))
sFile = Left$(sBuffer, InStr(sBuffer, vbNullChar) - 1)

' Multimedia-Typ ermitteln
sType = VideoGetType(sFile)

' File öffnen
mciSendString "open " & sFile & " type " & sType & " alias Video", 0, 0, 0
DoEvents

' Zeitformat auf Millisekunden einstellen
mciSendString "set Video time format milliseconds", 0, 0, 0
DoEvents

End Sub




' Multimedia-Datei schließen
Public Sub VideoClose()
On Error Resume Next
mciSendString "close Video", 0, 0, 0
End Sub




' Multimedia-Typ ermitteln
Public Function VideoGetType(ByVal sFile As String) As String

Dim sExt As String

If InStr(sFile, ".") > 0 Then
sExt = Right$(sFile, Len(sFile) - InStrRev(sFile, ".", Len(sFile)))
Select Case LCase(sExt)
Case "mpeg", "mpg", "m1v", "m2v"
VideoGetType = "MPEGVideo"
Case "avi"
VideoGetType = "AVIVideo"
Case Else
VideoGetType = "MPEGVideo"
End Select
End If
End Function




' Videogröße (Breite) ermitteln
Public Sub VideoWidth(ByVal sFile As String) As Long
Dim sBuffer As String * 255
Dim sTemp() As String

VideoOpen(sFile)

On Error Resume Next
mciSendString "where Video destination", sBuffer, Len(sBuffer), 0
sTemp = Split(Left$(sBuffer, InStr(sBuffer, vbNullChar) - 1), " ")
VideoWidth = Val(sTemp(2))

VideoClose
End Sub




' Videgröße (Höhe) ermitteln
Public Sub VideoHeight(ByVal sFile As String) As Long
Dim sBuffer As String * 255
Dim sTemp() As String

VideoOpen(sFile)

On Error Resume Next
mciSendString "where Video destination", sBuffer, Len(sBuffer), 0
sTemp = Split(Left$(sBuffer, InStr(sBuffer, vbNullChar) - 1), " ")
VideoHeight = Val(sTemp(3))

VideoClose
End Sub



Mit vbscript kann man dann die dll nach registrieren in Windows einbinden und z.B. der Befehl VideoWidth("Videodatei") liefert dann einem die Videobreite.
Ist es möglich diese dll in einem Programm, welches ich mit QT erstelle, einzubinden, so dass ich die Funktionen benutzen kann?
Und wenn ja, wie?

Falls dies nicht möglich ist, wäre es echt klasse, wenn mir jemand sagen könnte, wie ich die MCI direkt in einer Funktion verwenden kann und was ich dafür includen muss.

Vorab schon einmal vielen Dank, an alle, die sich meinem Problem widmen und eventuell auch eine Lösung für mich haben.
Antworten