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

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

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

Beitrag 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
Zuletzt geändert von scholly am 17.05.2008 14:34, insgesamt 2-mal geändert.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Woher sollen wir das wissen ohne die DLL, ihre Funktionen, Parameter und Rückgabewerte zu kennen? Raten?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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.
a²+b²=mc²
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag 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 ?
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Rufe deine Funktionen alle mit CallCFunction auf.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag 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
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

War das nicht von dieser Seite http://mediainfo.sourceforge.net/de ?
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag 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.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag 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 ?
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Antworten