AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ProcessCallback aus DLL

Ein Thema von Steran · begonnen am 17. Jul 2004 · letzter Beitrag vom 27. Jul 2004
Antwort Antwort
Steran

Registriert seit: 14. Jan 2003
42 Beiträge
 
#1

ProcessCallback aus DLL

  Alt 17. Jul 2004, 18:41
Hallo!

Ich hoffe ich bin hier richtig!
Hab leider nocht nicht viel mit Klassen etc. in Delphi gearbeitet, und stell hier einfach mla die Frage ins Forum:

Ich will ein grabbing tool für meine D-Box schreiben!
Jemand hat eine DLL (WingrabEngine.DLL (dem ein oder andern evtl. bekannt)) erstellt, die ich dann mit meinem Tool ansprechen will!

So weit so gut...grabben funzt auch, nur habe ich das Problem, dass ich es nicht schaffe die Statusinformationen aus der DLL "abzuholen".

Hier hätte ich mal ein VB.NET Beispiel, vielleicht kann mit das jemand bezüglich MessageCallBack für Delphi übersetzen:

Code:
Implements IWinGrabProcessCallback
Public WinGrabLibrary As Object
Public WinGrabGrabControl As Object

Private Sub Form_Load()
   
    Dim video As String
    Dim audio(3) As String

    video = "C:\Recording\Kabel_00.vpes"
    audio(0) = "C:\Recording\Kabel_01.apes"
    audio(1) = "C:\Recording\Kabel_02.apes"

    'z.B. zwei PES-Streams (udrec -pes) zu einem PS-Stream muxen
    Set WinGrabLibrary = CreateObject("WinGrabEngine.WinGrabLibrary")
    Set WinGrabGrabControl = WinGrabLibrary.StartMuxEx(video, -1, -1, audio, "C:\Recording\Kabel.mpg", 0, Me)

End Sub

Public Sub IWinGrabProcessCallback_OnMessage(ByVal sMessage As String)
   
    'Log-Ausgabe (sMessage) wird als String übergeben
   
End Sub

Public Sub IWinGrabProcessCallback_OnStateChange(ByVal sName As String, ByVal sState As String)
   
    'Status-Informationen (z.B. "Muxer" sName, "SCR: 00:00:00.480 Syncs: 1" sState) werden jeweils als String übergeben
   
End Sub
Um das Public Sub IWinGrabProcessCallback_OnMessage(ByVal sMessage As String) bzw. das implements ganz oben gehts mir eigentlich!!!
Hab in meinem Prog schon schon eine procedure eingefügt:
procedure IWinGrabProcessCallback_onMessage(sMessage: String), aber irgendwie wird die procedure nicht aufgerufen, falls daten von der dll kommen!

Irgendwo in meinem Programm (deklarationen?) muss ich ihm sicher noch sagen, dass er die procedure aufrufen soll, oder??

Hoffe das Problem ist nicht zu speziell!

danke für Eure Bemühungen!

MfG

Steran
  Mit Zitat antworten Zitat
Steran

Registriert seit: 14. Jan 2003
42 Beiträge
 
#2

Re: ProcessCallback aus DLL

  Alt 19. Jul 2004, 18:18
sorry für doppelpost, aber ich habs leider immer noch nicht geschafft!

Was ich noch gefunden hätte:

Der callback ist, wie der name schon sagt, ein callback
soll heißen: Du must selber dieses interface implementieren und eine instanz des interfaces beim startmux aufruf übergeben. Die WinGrabEngine wird dann nach bedarf die methoden des von dir implementierten interfaces aufrufen. Vorsicht: der Callback erfolgt evtl. im context eines anderen threads.


Das hat der Author in einem Forum gepostet, kann mir das jmd. in Delphicode übersetzen bzw. erklären? Leider kann ich ihn persönlich nicht erreichen (

ach ja, die DLL hab ich über "Typenbibliothek einbinden" eingebunden, mir wurden dann 3 neue Komponenten in dem ActiveX-Reiter erstellt!

Danke
  Mit Zitat antworten Zitat
Steran

Registriert seit: 14. Jan 2003
42 Beiträge
 
#3

Re: ProcessCallback aus DLL

  Alt 27. Jul 2004, 19:36
so...da keiner geantwortet hat, erlaube ich mir einfach einen Doppe-Doppelpost mit der Lösung (evtl. hilfts ja jmd. der die suche benutzt und ein ähnliches prob hat!)


nach den uses:

Code:
  type
  TForm1 = class(TForm, IWinGrabProcessCallBack)
   .
   .
   .
  private
    { Private-Deklarationen }
     procedure OnMessage(const aMessage: WideString); safecall;
     procedure OnStateChange(const aName: WideString; const aState: WideString); safecall;
die proceduren müssen genauso heissen, wie sie im IWinGrabProcessCallBack deklariert wurden!

beim GrabStart geben wir dann als Callback die Klasse an, in der das IWinGrabProcessCallBack Interface eingebunden wurde:

z.B.
Code:
Grab := Form1.WinGrabLibrary.StartMuxGrabEx('192.168.0.25', 68, 69, 'C:\out.m2p', Form1);
im Programm müssen nun die oben deklarierten proceduren vorhanden sein, welche die Aktion ausführen für onMessage z.B. (procedure 1:1 aus wingrabz kopiert!):

Code:
procedure TForm1.OnMessage(const aMessage: WideString); safecall;
var s : string;
begin
  s := '';
  DateTimeToString(s, 'hh:nn:ss.zzz', Now);
  s := Format('%s %s', [s, aMessage]);
  frmStates.mmoMessages.Lines.Insert(0, s);
end;
MfG

Steran
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz