AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit iTunes und COM

Ein Thema von sebi87 · begonnen am 9. Jun 2011 · letzter Beitrag vom 14. Jun 2011
Antwort Antwort
sebi87
(Gast)

n/a Beiträge
 
#1

Problem mit iTunes und COM

  Alt 9. Jun 2011, 20:18
Hallo Leute,

ich versuche mein iTunes über COM zu stueren was auch mittels Buttons ganz gut funktioniert. Hier mal eine Beispielprocedure

Delphi-Quellcode:
procedure play;
var
  iTunes : OleVariant;
begin
  try
    iTunes := CreateOleObject('iTunes.Application');
    if not VarIsNull(iTunes) then begin
      iTunes.Play;
      iTunes := Unassigned;
    end;
  except
  end;
end;
Funktioniert auch ganz gut. Wenn ich die Procedure über ein Ereignis des IndyHTTPServers aufrufe bekomme ich immer diese Fehlermeldung
Code:
Im Projekt HomeServer.exe ist eine Exeption der Klasse EOleSysError aufgertreten. Meldung: 'CoInitialize wurde nicht aufgerufen'. Prozes....
ich habe es schon mit OleInitialize(nil); vor dem Aufruf und bei Formcreate versucht.

Wo mache ich den Fehler?

Viele Grüße
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#2

AW: Problem mit iTunes und COM

  Alt 9. Jun 2011, 20:45
Warum rufst du nicht mal CoInitialize() auf?
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Problem mit iTunes und COM

  Alt 10. Jun 2011, 01:54
Man braucht eigentlich nur die Unit ActiveX oder ComObj *) mit der Uses-Klausel einbinden und der Initialization-Abschnitt sorgt dann dafür das CoInitialize() bzw. CoInitalizeEx() aufgerufen wird.
Im Finalization-Abschnitt wird das Gegenstück CoUninitialize() aufgerufen.
Diese angenehme Automatik betrifft aber nur den Hautpthread; bei eigenen Threads muss man selbst Hand anlegen.

*) kann gerade mangels einer Delphi Installation nicht genau sagen, welche Unit es genau ist.
Bitte selber nachforschen.
  Mit Zitat antworten Zitat
sebi87
(Gast)

n/a Beiträge
 
#4

AW: Problem mit iTunes und COM

  Alt 10. Jun 2011, 07:19
Trotz CoInitialize(nil) und das einbinden von der Unit ActivX und Comobj bekomme ich den selben fehler.
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Problem mit iTunes und COM

  Alt 10. Jun 2011, 14:59
Man braucht eigentlich nur die Unit ActiveX oder ComObj *) mit der Uses-Klausel einbinden und der Initialization-Abschnitt sorgt dann dafür das CoInitialize() bzw. CoInitalizeEx() aufgerufen wird.
ComObj ist's. Hilft aber hier nicht, hast Du ja schon selber erwähnt eigentlich

@sebi87: bist Du sicher, daß Du CoInitialize an der richtigen Stelle aufgerufen hast? Du sprichst von einem HTTP-Server; da wird jede Instanz in einem eigenen Thread laufen (sonst könnte ein Server nie mehr als einen HTTP-Client gleichzeitig bedienen), in dem Du das dann aufrufen musst, siehe auch sx2008's Nebenkommentar:
bei eigenen Threads muss man selbst Hand anlegen.
  Mit Zitat antworten Zitat
sebi87
(Gast)

n/a Beiträge
 
#6

AW: Problem mit iTunes und COM

  Alt 13. Jun 2011, 15:25
Wie kann ich herrausfinden in welchen Thread dieses Event läuft?

Delphi-Quellcode:
procedure TForm1.IdHTTPServer1CommandGet(AThread: TIdPeerThread;
  RequestInfo: TIdHTTPRequestInfo; ResponseInfo: TIdHTTPResponseInfo);
begin
  if RequestInfo.Params.Strings[0] = 'in:requestthen
  begin
    Label1.Caption := 'Eingehender Anruf von ' + RequestInfo.Params.Strings[2] ;
    if iTunesRunning then iTunesPause ;
  end ;
  if RequestInfo.Params.Strings[0] = 'in:cancelthen
  begin
    Label1.Caption := 'Verpasster Anruf' ;
    if iTunesRunning then iTunesPlay ;
  end ;
end;
Oder reicht es wenn ich das CoInitialize(nil) am Anfang der procedure aufrufe?
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Problem mit iTunes und COM

  Alt 14. Jun 2011, 10:39
Du setzt einen Debugger-Breakpoint in dieser Funktion, und öffnest die Thread-Liste in der IDE (View -> Debug Windows -> Threads).

Oder Du liest Dir einfach die Indy-Sourcen dazu durch. Ich sehe gerade, daß Du im Handler VCL-Aktionen durchführst. Wenn das erlaubt ist, könnte es sein, daß das Event synchronisiert geliefert wird und Du Dich damit doch im Hauptthread befindest.

Wenn Du CoInitialize hinzufügst, vergiss das CoUnitialize nicht. Also in etwa:

Code:
if CoInitialize(nil)=S_OK then begin
   try
      // code
   finally
      CoUnitialize;
   end;
end;
  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 06:14 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