COM Objekte in einem anderem Thread starten

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
rassekst
UDF-Programmierer
UDF-Programmierer
Beiträge: 97
Registriert: Mi, 01. Feb 2006 23:49
Wohnort: Glauchau
Kontaktdaten:

COM Objekte in einem anderem Thread starten

Beitrag von rassekst »

Hallo,

Ich habe eine Anwendung in welchem verschiedene API's von diversen Drittherstellern verwendet werden. Das Programm erstellt das entsprechende Handle zu diesen COM-Objekten im Hauptprogramm. Das Handle wird in einer PUBLIC Variablen gespeichert. In einem zweiten Thread, dem Workerthread benutze ich dieses Handle zum ansprechen der einzelnen Methoden. Eine Neuinstanzierung o.ä. findet über die gesamte Laufzeit den Programms nicht statt.
Das klappt bis jetzt ohne Probleme.
Bei der Anbindung einer weiteren API kommt es aber nun zu massiven Problemen. Die API selber ist sehr einfach ohne besondere Anforderungen.
Es kommt in unbestimmten Fällen (sofort nach dem Start oder nach 3 Tagen) zu dem Fehler:

------------------------------------------------------------------------------
FEHLERPROTOKOLL von "L:\Programme\XMLConnector\XMLConnector.exe" Datum: 31.12.2010 20:39:45

Xbase++ Version : Xbase++ (R) Version 1.90.331
Betriebssystem : Windows XP 05.02 Build 03790 Service Pack 2
------------------------------------------------------------------------------
oError:args :
-> VALTYPE: C VALUE: ArchiveByFile
-> VALTYPE: C VALUE: \\dc14\HH\HKR\WORK\ARCHIV-AUSTAUSCH\EXP\$EXT_832A498A-0279-D2BB-E011-141575807DDA_2Charta.xml
-> VALTYPE: C VALUE:
oError:canDefault : Y
oError:canRetry : N
oError:canSubstitute: Y
oError:cargo : NIL
oError:description : Unbekannter Fehler

oError:filename : NIL
oError:genCode : NIL
oError:operation : ArchiveByFile
oError:osCode : -2147467259
oError:severity : 2
oError:subCode : 6500
oError:subSystem : Automation
oError:thread : 5
oError:tries : NIL
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------

Called from XML_QUERRY2(6913)
Called from PFADSCAN:EXECUTE(3131)

Die Methode ArchiveByFile ist definitiv vorhanden. Die Funktion wurde 1-2 Sekunden vorher erfolgreich aufgerufen.

Hat einer schon mal solche Probleme beim ansprechen einer COM?
Die COM ist in VB6 programmiert.

Über jeden Hinweis wäre ich dankbar.
_________________________
Grüße,

Steffen
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: COM Objekte in einem anderem Thread starten

Beitrag von AUGE_OHR »

rassekst hat geschrieben:Xbase++ Version : Xbase++ (R) Version 1.90.331
Betriebssystem : Windows XP 05.02 Build 03790 Service Pack 2
hm ... beide Versionen sind aber nicht die "lates" Updates ...
rassekst hat geschrieben: oError:args :
-> VALTYPE: C VALUE: ArchiveByFile
-> VALTYPE: C VALUE: \\dc14\HH\HKR\WORK\ARCHIV-AUSTAUSCH\EXP\$EXT_832A498A-0279-D2BB-E011-141575807DDA_2Charta.xml
-> VALTYPE: C VALUE:
oError:canDefault : Y
oError:canRetry : N
oError:canSubstitute: Y
oError:cargo : NIL
oError:description : Unbekannter Fehler

oError:filename : NIL
oError:genCode : NIL
oError:operation : ArchiveByFile
oError:osCode : -2147467259
oError:severity : 2
oError:subCode : 6500
oError:subSystem : Automation
oError:thread : 5
oError:tries : NIL
------------------------------------------------------------------------------
CALLSTACK:
------------------------------------------------------------------------------
Called from XML_QUERRY2(6913)
Called from PFADSCAN:EXECUTE(3131)

Die Methode ArchiveByFile ist definitiv vorhanden. Die Funktion wurde 1-2 Sekunden vorher erfolgreich aufgerufen.

Hat einer schon mal solche Probleme beim ansprechen einer COM?
Die COM ist in VB6 programmiert.

Über jeden Hinweis wäre ich dankbar.
YUP das Problem kenne ich von meinen WMPlayer und der v331.
Play -> Pause ->Play -> Pause -> Play -> crash ... keine Methode Play() :angry4:

auch wenn du keine aktive Subscription hast kannst du deine "original" v331 zur v355 "upgraden".
den v331->SL1 "Patch" bekommst du von der Alaska Website nachdem du dich eingeloggt hast.

der "Patch" wird dann im Xbase++ "Root" Verzeichniss, z.B. c:\ALASKA\XPPW32, gestartet.
danach mit XppLoad überprüfen ob wirklich auf die "neuen" SL1 DLLs zugegriffen wird.
nicht vergessen alle "Source" LIBs ( Express++) neu zu erstellen bevor man seine Xbase++ Applicationen neu erstellt.

für ActiveX ( SL1 ?) gibt es nun einige "undokumentierte" Befehle wie

Code: Alles auswählen

// bei DOSframer auf .F. setzten
// wenn ActiveX im "eigenen" Thread läuft, wie der Codejock Calender, mal auf .F. setzten
********************
o:useGuiThread := .T. / .F.

// bei RTF Fenster auf .F. setzten ( Dialog-Window mit RTF lässt sich kaum verschieben )
// Codejock v13.x Command / Ribbonbar reagiert träge dann .F. setzten
// Codejock v13.x ShortCut  reagiert träge dann .F. setzten
// M$ComCtl.OCX Listview ?
*********************
o:UserEvents     := .T. / .F.

// wenn hide()/show() nicht richtig funktioniert auf .F. setzen
*********************
o:ReCreateHandle := .T. / .F.
rassekst hat geschrieben:Das Handle wird in einer PUBLIC Variablen gespeichert
das Thema habe ich versucht mit meinem "Errorsys - Problem" zu schildern.
meine 3 PUBLIC / PRIVATE kommen bei "einigen" Fehlern, die einen Thread passieren, nicht in der Errorsys an.
( oder es ist nicht "meine" Errorsys" sondern die "original" in XppSYS.DLL )

auch wenn ich die PUBLIC / PRIVATE als Parameter übergebe passiert "manchmal" der Fehler das er zPATH nicht kennt :banghead:

das einzige was dann noch blieb war

Code: Alles auswählen

Class MyClass FROM AutomationObject,Thread
und in der :create() Methode zPATH einer Class VAR zuzuordnen.
gruss by OHR
Jimmy
rassekst
UDF-Programmierer
UDF-Programmierer
Beiträge: 97
Registriert: Mi, 01. Feb 2006 23:49
Wohnort: Glauchau
Kontaktdaten:

Re: COM Objekte in einem anderem Thread starten

Beitrag von rassekst »

Hy Jimmy

Ich danke dir für deine schnelle Antwort und wünsche dir ein gesundes Neues Jahr
Das SL1 habe ich noch nicht. Leider scheint mein Zugang zur xBase++ Website nicht mehr zu funktionieren.
Ich werde ertmal bei Alaska nachfragen.
_________________________
Grüße,

Steffen
Antworten