Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi COM-Objekte innerhalb von Threads (https://www.delphipraxis.net/90043-com-objekte-innerhalb-von-threads.html)

shmia 11. Apr 2007 18:36

Re: COM-Objekte innerhalb von Threads
 
Ich würde das Interface für iTunes nur einmal erzeugen und zwar im Hauptthread.
Dann gibt man das Interface beim Erzeugen des Thread-Objekts "einfach" weiter.
Wenn 5 Threads das Interface benützen, dann steht RefCount auf 6 (5 Thread + die Referenz im Hauptthread).

Wenn Interface-Pointer von einem Thread an einen anderen Thread weitergereicht werden soll,
dann muss man Marshaling anwenden.
siehe: http://www.techvanguards.com/com/tut...s%20apartments

CalganX 11. Apr 2007 18:50

Re: COM-Objekte innerhalb von Threads
 
Hi shmia,
wie soll denn der Pointer weitergegeben werden? Reicht ein einfaches zuweisen, wie ich es oben schon probiert habe? Das Marshalling versuche ich nachher.

Danke,
Chris

shmia 11. Apr 2007 19:15

Re: COM-Objekte innerhalb von Threads
 
Zitat:

Zitat von CalganX
Das Marshalling versuche ich nachher.

Ohne Marshaling geht es nicht! Andernfalls erscheint der Fehler: "The application called an interface that was marshaled for a different thread"
Auf der obigen Webseite werden 2 Techniken gezeigt; die 2. Technik mit dem Hilfs-Interface IGlobalInterfaceTable
ist für deinen Zweck am Besten.

CalganX 11. Apr 2007 20:59

Re: COM-Objekte innerhalb von Threads
 
Hi shmia,
ja, die Fehlermeldung hatte ich zwischen durch auch mal, aber wie gesagt, kommt jetzt im Moment der Fehler ja in erster Linie bei CoiTunesApp.Create und das passiert ja vor dem marshalen, oder?

Chris

CalganX 11. Apr 2007 21:29

Re: COM-Objekte innerhalb von Threads
 
Hi,
hab es jetzt auch so implementiert, wie es auf der Seite gezeigt wird. Der Fehler beim Erzeugen ist immer noch da. Und wie gesagt nehme ich an, dass iTunes es nicht mag, wenn man es über Dienste ansteuert.

Chris

OldGrumpy 11. Apr 2007 21:39

Re: COM-Objekte innerhalb von Threads
 
Falls es nur am fehlenden Fenster liegt, kannst Du Dir ja ein unsichtbares Fenster mittels AllocateHwnd holen (das musst Du aber auch mit UnAllocateHwnd wieder freigeben!), nen Test kann ja nicht schaden.

CalganX 11. Apr 2007 21:46

Re: COM-Objekte innerhalb von Threads
 
Und was soll ich mit dem Fenster machen? Woher will iTunes denn wissen, ob ich ein Fenster habe oder nicht? Es wird nirgendwo ein Parameter gefordert, der so einen Schluss zulassen würde.

Chris

Edit: Einfach so ein Handle zu erzeugen, hilft aber nicht.

OldGrumpy 11. Apr 2007 21:50

Re: COM-Objekte innerhalb von Threads
 
iTunes könnte z.B. sich das Top Level Window des Callers holen wollen (wozu auch immer, seitdem ich Entwicklerfeuerwehr spiel, halte ich keine Idee mehr für unmöglich *g*), dazu musst Du keinen Parameter übergeben.

Edit: Na jut, dann hat sich das wohl erledigt. Naja, ist nicht das erste Mal dass iTunes für graue Haare sorgt :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz