Seite 1 von 2

[gelöst] MediaInfo.dll und PBOSL_LoadDllMemory

Verfasst: 22.05.2008 22:08
von scholly
moin, moin...

Kann ich die MediaInfo.dll per IncludeBinary mit PBOSL_LoadDllMemory verwenden?
Bisher benutze ich sie über ein .lib-File prinzipipiell so:

Code: Alles auswählen

;MediaInfo.dll -> http://sourceforge.net/project/showfiles.php?group_id=86862&package_id=90614

video.s       = "test.avi"
streamkind.c  = 2
InfoKind.s    = "SamplingRate_String"

Import "MediaInfo0762.lib"
    MediaInfo_New()
    MediaInfo_Info_Version()
    MediaInfo_Delete(handle)
    MediaInfoA_Open(handle,file.s)
    MediaInfoA_Option()
    MediaInfoA_Get(Handle,StreamKind,StreamNumber,Parameter.s,InfoKind,SearchKind)
EndImport
 
Handle = MediaInfo_New()
 
If Handle
  MediaInfoA_Open(Handle,video)       
  info_ptr = MediaInfoA_Get(Handle,StreamKind, 0, InfoKind, 1, 0)
  Debug PeekS(info_ptr)
  MediaInfo_Delete(Handle)
EndIf

End
mDV....

Verfasst: 22.05.2008 22:31
von ts-soft
Mußte ausprobieren, es gibt einige wenige DLLs, die nicht gehen.

Import geht natürlich nicht :wink:

Verfasst: 23.05.2008 01:13
von scholly
ts-soft hat geschrieben:Mußte ausprobieren, es gibt einige wenige DLLs, die nicht gehen.
Ich hab mir zwar das FMod-Beispiel angesehen, aber keinen Schimmer, wie ich das auf die MediaInfo umsetzen soll :(
ts-soft hat geschrieben: Import geht natürlich nicht
hm...
In diesem Thread war das aber Dank edel die einzige Möglichkeit, MediaInfo >0.611 zu benutzen.

Jetzt sitz ich wohl in einer echten Zwickmühle, wenn ich sicherstellen will, daß die richtige MediaInfo.dll benutzt wird:

- entweder benutze ich eine alte Version per PBOSL_LoadDllMemory und muß auf Features >0611 verzichten,
- oder die aktuell mitliefern und per .lib benutzen.

Dann muß ich die jedoch, wenn ich edel richtig verstanden habe, mit ins Programmverzeichnis kopieren, was wiederum den XP-/Vista-Richtlinen widersprechen würde.

Würdest mir denn jemand anhand eines funktionierenden Codeschnipsels zeigen, wie ich das mit LoadDllMemory prinzipiell machen müßte ?

Code: Alles auswählen

 Procedure.s ugs_get_MediaInfo(thisvalue.s,thisMediafile.s)
   
  If OpenLibrary(0,"MediaInfo0611.dll")
    
    Handle = CallFunction( 0, "MediaInfoA_Open", thisMediafile)
    If handle

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

      CallFunction( 0, "MediaInfoA_Close", Handle)
      CloseLibrary(0)
      ProcedureReturn info
    Else
      Debug "kein Handle bekommen"
    EndIf
  Else
    Debug "konnte MediaInfo0611.dll nicht öffnen"
  EndIf
EndProcedure; ugs_get_MediaInfo

Mediafile.s = "test.avi"
Debug "Bitrate_main: " + ugs_get_MediaInfo("BitRate_String",Mediafile) 
End
 
DataSection
  Label_MediaInfo_DLL:
  IncludeBinary "MediaInfo0611.dll"
EndDataSection
mDV...

Verfasst: 23.05.2008 01:33
von ts-soft
Moment, hab die lib nicht installiert

Verfasst: 23.05.2008 01:35
von scholly
ts-soft hat geschrieben:Moment, hab die lib nicht installiert
Wie, noch online ?
Oder guckste auch grad WDR ?

Eile mit Weile....

Verfasst: 23.05.2008 01:40
von ts-soft
Ungetestet:

Code: Alles auswählen

Prototype pMediaInfo_New()
Prototype pMediaInfo_Delete(handle)
Prototype pMediaInfoA_Open(Handle,StreamKind,StreamNumber,Parameter.s,InfoKind,SearchKind)
Prototype pmediaInfoA_Get(Handle,StreamKind,StreamNumber,Parameter.s,InfoKind,SearchKind)

hModule = LoadLibraryM(MemoryPointer.l)
MediaInfo_New.pMediaInfo_New = GetProcAddressM(hModule, "MediaInfo_New")
MediaInfo_Delete.pMediaInfo_Delete = GetProcAddressM(hModule, "MediaInfo_Delete")

; usw

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)

EndI
; ...

FreeLibraryM(hModule)
Kein WDR, VOX :lol:

Verfasst: 23.05.2008 01:43
von edel
Dein Programm muss die DLL nur finden, das heisst sie muss in einem
Ordner liegen, der in der Umgebungsvariable PATH eingetstellt wurde,
Systemordner, oder im selben Ordner wie die EXE.

Verfasst: 23.05.2008 01:53
von ts-soft
> - entweder benutze ich eine alte Version per PBOSL_LoadDllMemory
warum alte Version? Verstehe ich nicht. Oder geht die nicht mehr?

Verfasst: 23.05.2008 02:04
von scholly
@edel
Das Problem liegt in der "Benennung".
Die mediainfo.lib braucht "mediainfo.dll".
Im Path kann aber eine "mediainfo.dll" falscher Version liegen.

Somit bliebe nur das "richtlinienwidrige" Programmverzeichnis, da ich die .lib nicht dazu bewegen kann, eine bestimmte "mediainfo_versionNr.dll zu benutzen.

Ich bastel aber schon an dem Schnipsel von Thomas herum, auch wenn die Ärzte mich arg abhalten :lol:

@ts-soft
>0611 gings nur mit der .lib
Du schriebst "nix mit Include".
-> LoadDllMemory nur mit 0611.

Aber ich bastel grad mit der 0770 rum...

Verfasst: 23.05.2008 02:11
von ts-soft
scholly hat geschrieben: @ts-soft
>0611 gings nur mit der .lib
Du schriebst "nix mit Include".
-> LoadDllMemory nur mit 0611.

Aber ich bastel grad mit der 0770 rum...
Ich weiß nicht worum es geht, bahnhof.

Code: Alles auswählen

DataSection
  MemoryPointer: IncludeBinary "mediainfo.dll"
EndDataSection
Oben "LoadLibraryM(MemoryPointer.l)" ändern in LoadLibraryM(?MemoryPointer)
Das hätteste aber auch an den Beispielen in der Hilfe zu PBOSL erkennen können.