Seite 1 von 2

[gelöst] MediaInfo.dll - Invalid memory access - Warum ?

Verfasst: 15.10.2007 22:54
von scholly
moin, moin...
Error Log hat geschrieben:[22:34:20] Executable started.
[22:34:21] [ERROR] 611_proc.pb (Line: 33)
[22:34:21] [ERROR] Invalid memory access.
[22:42:50] The Program was killed.
Warum bekomme ich den Fehler, wenn ich die DLL in einer Subroutine benutze ?

Code: Alles auswählen

  If OpenLibrary(0,"MediaInfo_0611.dll")
    Mediafile.s = "D:\4tests\ugs_avi.avi"
    Handle = CallCFunction( 0, "MediaInfoA_Open", Mediafile)

    info.s = PeekS(CallFunction( 0, "MediaInfoA_Get", Handle, 2, 0, "Bitrate_string", 1, 0))
    Debug "Bitrate:  " + info

    CallFunction( 0, "MediaInfoA_Close", Handle)
    CloseLibrary(0)
  Else
    info = "konnte MediaInfo_0611.dll nicht öffnen"
  EndIf
  
  Gosub dummy
  End
  
  dummy:
  ;#########################################################################################
  ;{
    If OpenLibrary(2,"MediaInfo_0611.dll")
    Mediafile.s = "D:\4tests\ugs_avi.avi"
    Handle = CallCFunction( 2, "MediaInfoA_Open", Mediafile)

    info.s = PeekS(CallFunction( 2, "MediaInfoA_Get", Handle, 2, 0, "Bitrate_string", 1, 0))
    Debug "Bitrate:  " + info

    CallFunction( 2, "MediaInfoA_Close", Handle)
    CloseLibrary(2)
  Else
    info = "konnte MediaInfo_0611.dll nicht öffnen"
  EndIf
  ;}
  Return; dummy
  
höchst irritiert... scholly

Verfasst: 15.10.2007 23:06
von Fluid Byte
Woher sollen wir das wissen ohne die DLL, ihre Funktionen, Parameter und Rückgabewerte zu kennen? Raten?

Verfasst: 15.10.2007 23:07
von Kiffi
Fluid Byte hat geschrieben:Woher sollen wir das wissen ohne die DLL, ihre Funktionen, Parameter und Rückgabewerte zu kennen?
... und in welcher Zeile es kracht.

Verfasst: 15.10.2007 23:37
von scholly
Was ich nicht verstehen kann ist folgendes:

Der Code läuft durch und debugged den erwarteten Wert.

Dann rufe ich den gleichen Code in einer Subroutine auf und bekomme in der letzten Zeile (33, wie oben geschrieben) der Subroutine (Return; dummy) den Fehler:[ERROR] Invalid memory access.
Ins Debuugerfenster wurde derselbe Wert ausgegeben wie vorher, als der Code direkt ausgeführt wurde.

Kommentiert man den Sprung in die Subroutine aus, beendet sich das Prog ohne Error.

Wie soll ich mir darauf einen Reim machen ?

Verfasst: 16.10.2007 06:04
von edel
Rufe deine Funktionen alle mit CallCFunction auf.

Verfasst: 16.10.2007 21:31
von scholly
edel hat geschrieben:Rufe deine Funktionen alle mit CallCFunction auf.
Dann hängts.
Aber wenn ich überall CallFunction nehm, klappts auch inner Procedure ;).

danke... scholly

Verfasst: 17.10.2007 04:44
von edel
War das nicht von dieser Seite http://mediainfo.sourceforge.net/de ?

Verfasst: 17.10.2007 11:54
von scholly
edel hat geschrieben:War das nicht von dieser Seite http://mediainfo.sourceforge.net/de ?
Genau.

Ich hab letztes Jahr angefangen, eine DB für meine Movies zu schreiben.
Anfangs hab ich die Informationen direkt manuell aus dem AVI geholt, aber als ich dann auch MPEG verwurschteln wollte, hab ich aufgegeben.
Irgendwann bin ich dann im englischen Forum und der Lounge über Beiträge zur MediaInfo.dll gestolpert.
Aus den dort vorhandenen Beiträgen/Schnipseln und dem DLL-Tutorial hab ich dann versucht, zu was Nutzbarem zu kommen.
Vom Prinzip bin ich gescheitert, da ich es nur geschafft habe, einige Funktionen der veralteten Version 0.611 zu nutzen.
Nun werden die Tage länger und mein Garten rückt etwas in den Hintergrund und da hab ich angefangen, meine DB etwas auszubauen.
Nachdem der Wechsel CSV -> SQLite geklappt hat, gehts jetzt daran, mehr Infos zu den Movies abzuspeichern.
Ich hab also meinen alten Schnipsel rausgekramt und als ich dann eine Subroutine darus basteln wollte, bin ich aufgelaufen.

Verfasst: 17.10.2007 15:06
von edel
Ich habe mir gestern die DLL angeschaut , und es war meiner
Meinung nach alles cdecl. Aber solange es laeuft ist es ja egal.

Verfasst: 17.10.2007 15:59
von scholly
edel hat geschrieben:Aber solange es laeuft ist es ja egal.
Das seh ich nicht ganz so, da es sich ja schon gezeigt hat, daß der Code, den ich damals nur mit der Version 0.611 zu verwertbaren Rückgabewerten bewegen konnte, in einer anderen Situation zum Abbruch führte und somit eigentlich nicht korrekt war.

Insofern sind mir solche "Zufallstreffer" nicht genehm, da ich später nicht absehen kann, warum ein anderer Fehler auftritt.

Ich bin damals mit der Doku zur MediaInfo.dll schlecht klar gekommen, da ich AFAIR in dem Source-Tree keine "echte" Doku gefunden habe, sondern mir alles aus den C-Sourcen zusammenreimen mußte.

Den Unterschied von CallFunction() und CallCFunction() verstehe ich auch nicht, obwohl ich neben der deutschen und englischen PB-Help auch Remis Tutorial gelesen habe.

Hinzu kommt, das in der MediaInfo.dll die Funktionen fast alle in vier Ausprägungen auftauchen, Beispiel:

Code: Alles auswählen

MediaInfo_Open
MediaInfoList_Open
MediaInfoA_Open
MediaInfoListA_Open
Das WARUM und der Unterschied verschließen sich mir.

Ich stochere praktisch blind umher, erziele (wie das dumme Huhn) mal einen Zufallstreffer und weil ich den Zufall nicht sehe, tappe ich natürlich sofort in die nächste Falle, wo der Treffer daneben liegt.

Meine bisherige Rechere im deutschen/englischen/Longe-Forum haben mich auch zu der Auffassung gebracht, daß das Theme MediaInfo eigentlich nur mich interessiert und deswegen habe ich auch nicht weiter um tiefergreifende Hilfe gesucht.

Natürlich wäre es schön, wenn das, was inc. in der Longe unter anderem/alten Pseudo (Thorsten1867) mal angeboten hat, hier oder gar im CodeArchiv in aktualisierter Form auftauchen würde, aber ich trau mich aus vorgenanntem Grund nicht, danach zu Fragen ;)

Hast Du Dir nur den Source der MediaInfo.dll mal angesehen oder sogar etwas mit einem Video-File getestet ?
Und welche Version hast Du ageguckt/getestet ?