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

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Diese Version hier :
http://switch.dl.sourceforge.net/source ... .6.1.1.zip

In dem Paket ist ein Ordner namens Release\MSVC\Dll, dort liegt
eine Static Lib, die man fuer den Import benutzen kann. Einfach
nach "PureBasic\PureLibraries\Windows\Libraries\" kopieren.
Danach kannst du mit Hilfe von Import die Funktionen einfach
einbinden (siehe Code). Die DLL muss sich aber immer noch im
Programmpfad befinden.

Der Zusatz 'A' bei z.b. MediaInfoA_Open sagt nur das die Funktion
einen Ansi - String erwartet oder zurueck gibt. Die Ohne A moechten
dann Unicode.

Wenn du nichts mit cdecl und stdcall anzufangen weisst, kannst du mal
hier http://de.wikipedia.org/wiki/Aufrufkonvention reinschauen.

PB kann nur cdecl und stdcall, standard wird stdcall benutzt (Procedure).
Wenn man cdecl braucht benutzt man die Funktionen oder Schluesselwoerter
mit dem C (ProcedureC) usw.

Im Fall von MediaInfo werden alle Funktionen normal (also ohne C)
aufgerufen. Hab mich da wohl vertan ;)

Code: Alles auswählen

  Import "MediaInfo.lib"
    MediaInfoA_Open(File.s)
    MediaInfoA_Open_Buffer(Begin.s,Begin_Size,ende.s,End_Size)
    MediaInfoA_Save(Handle)
    MediaInfoA_Close(Handle)
    MediaInfoA_Inform(Handle,Options)    
    MediaInfoA_Get(Handle,StreamKind,StreamNumber,Parameter.s,InfoKind,SearchKind)    
    MediaInfoA_Set(Handle,ToSet.s,StreamKind,StreamNumber,Parameter.s,OldParameter.s)
    MediaInfoA_Option(Handle,Option.s,Value.s)
    MediaInfoA_State_Get(Handle)
    MediaInfoA_Count_Get(Handle,StreamKind,StreamNumber)
  EndImport 
  

  handle    = MediaInfoA_Open("Test.avi")
  info_ptr  = MediaInfoA_Get(Handle, 2, 0, "Bitrate_string", 1, 0)
  
  Debug "Bitrate:  " + PeekS(info_ptr)
    
  MediaInfoA_Close(handle)  
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Ich bin gegen 18:00 zuhause, dann guck ich mir das mal genauer an und versuche auch nochmal die neueste Version 0.753 - vielleicht klappt das ja mit deinem Ansatz besser ;)

bis später... 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 »

Ja das geht auch, aendert sich aber etwas :

Code: Alles auswählen

  Import "MediaInfo.lib"
    MediaInfo_New()
    MediaInfo_Delete(handle)
    MediaInfoA_Open(handle,file.s)
    MediaInfoA_Get(Handle,StreamKind,StreamNumber,Parameter.s,InfoKind,SearchKind)
  EndImport 
  
  Handle = MediaInfo_New()
  
  If Handle
    MediaInfoA_Open(Handle,"test.avi")         
    
    info_ptr = MediaInfoA_Get(Handle,2, 0, "SamplingRate_String", 1, 0)  

    Debug PeekS(info_ptr)
    
  EndIf 
  
  
  MediaInfo_Delete(Handle)
Zuletzt geändert von edel am 17.10.2007 19:25, insgesamt 1-mal geändert.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Puh.. Du bist ja schneller, als die PURElizei eraubt ;)
Deine Beispiele funktionieren latürnich, aber ich versteh nur Bahnhof :(

Beispiel 0611:
Wie bist Du auf die Idee gekommen, IMPORT zu benutzen, um meinen (umständlichen ?) Weg zu ersetzen ?
Woher hast Du diese Liste der Funktionen, die Du importierst ?

Wenn ich das mit Versionen >=0700 benutze, bekomme ich einen Hinweis auf ein veraltetes Interface.
Sieht das bei Deinem Code für 0753 deswegen anders aus ?
Brauchts die anderen Funktionen nicht oder hast Du sie weggelassen, weil ich mit den von Dir importierten eigentlich auskomme ?

Und damit ich mich nicht ganz so klein fühlen muß:
Hätte ich das ohne C-Kentnisse erkennen müssen ?

sich auf einen längeren Test-Abend einstellend...
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 »

scholly hat geschrieben:Puh.. Du bist ja schneller, als die PURElizei eraubt ;)
Deine Beispiele funktionieren latürnich, aber ich versteh nur Bahnhof :(

Beispiel 0611:
Wie bist Du auf die Idee gekommen, IMPORT zu benutzen, um meinen (umständlichen ?) Weg zu ersetzen ?
Ab Version 4 sind die ganzen "Call" Funktionen voellig unnoetig. Sind
langsam, koennen nur die Haelfte und der Code sieht scheisse aus.
Entweder macht man es ueber Import oder Prototypes.

scholly hat geschrieben: Woher hast Du diese Liste der Funktionen, die Du importierst ?
Aus der Dokumentation. Wobei das alles mehr als schlecht zu finden ist.

scholly hat geschrieben: Wenn ich das mit Versionen >=0700 benutze, bekomme ich einen Hinweis auf ein veraltetes Interface.
Sieht das bei Deinem Code für 0753 deswegen anders aus ?
Brauchts die anderen Funktionen nicht oder hast Du sie weggelassen, weil ich mit den von Dir importierten eigentlich auskomme ?
Mit Version 7 hat sich einiges geaendert, eben auch der Zugriff auf das
Handle z.B.. Die anderen Funktionen habe ich nicht reingeschrieben, da
es nur ein Beispiel sein sollte. Fuer den Rest musst du schon selber ran. ;)
scholly hat geschrieben: Und damit ich mich nicht ganz so klein fühlen muß:
Hätte ich das ohne C-Kentnisse erkennen müssen ?
Ich habe mir einiges aus dem Source geholt, aber auch fuer mich
war das schon recht schwierig, da alles in Klassen steckte.
scholly hat geschrieben: sich auf einen längeren Test-Abend einstellend...
scholly
Hau rein ;)
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

edel hat geschrieben:Aus der Dokumentation. Wobei das alles mehr als schlecht zu finden ist.
Hat der Autor im zugehörigen Forum sogar zugegeben. Vielleicht erbarmt er sich ja zur 1.0.
edel hat geschrieben:Mit Version 7 hat sich einiges geaendert,
Jo, und wie.
Hab eben mal MediaInfoA_Option(Handle, "Info_Parameters", "") debuggen lassen und war total Baff.
Scheint so, als wenn jetzt auch RIFF-Tags angezeigt werden, aber mangels Doku kann ich nur vermuten, daß das die Zusatzinfos sein könnten.
edel hat geschrieben:Ich habe mir einiges aus dem Source geholt, aber auch fuer mich war das schon recht schwierig, da alles in Klassen steckte.
Dann werd ich ja richtig Spaß bekommen :( - Suchen ist nicht grad meine Stärke; und dann noch in C-Code. :igittigitt: :roll:
edel hat geschrieben:Hau rein ;)
Und wie.
Und wenn ich garnicht weiter komm, hab ich ja hier im Thread jemand gefunden, der bei gutem Willen und genug freien Minuten helfen könnte ;)

vielen Dank ersma... scholly :roll:
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Mein Proggi läuft solange prima, wie ich die MedaInfo.dll im selben Verzeichnis wie .exe bzw .pb habe.
Ich würde aber lieber alle DLLs, die ich benutze, in einem Verzeichnis /libs unterbringen.
(Wie) Kann ich das der MediaInfo.lib irgendwie beibringen?

mDv...
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> Kann ich das der MediaInfo.lib irgendwie beibringen?
Nein, bei früher Bindung muß die DLL im Programm-Verzeichnis oder im
Systempfad sein (normalerweise System32)

Ansonsten geht nur mit late Bindung bzw. dynamischen Laden der DLL, dann
kannste aber nicht mehr die statische Lib nutzen!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Danke, damit hat sich das Umräumen nach /libs wohl erledigt. :|
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Antworten