Keine Reaktion mehr nach Aufruf von Com Object

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Keine Reaktion mehr nach Aufruf von Com Object

Beitrag von Wolfgang Ciriack »

Hallo,
ich habe ein Com-Fremdprogramm, dass ich wie folgt aufrufe:

Code: Alles auswählen

oPcCom := CreateObject( "Online.Applikation" )
IF Empty(oPcCom)
  statsay( "Fehler bei Zugriff auf 'PcCom'" +NEWLINE+ ;
            ComLastMessage() , ERROR2 )
  return cReceive
endif

nErr:=oPcCom:Command("RN", @cReceive)
.....
oPcCom:destroy()
return cReceive
Das klappt alles, ich bekomme richtige Daten in cReceive zurück.
Wenn ich jedoch danach den Dialog schließe, bleibt mein komplettes Programm hängen -"Keine Rückmeldung" und Sanduhr.

Hat jemand eine Idee, was man noch probieren kann ?
Netzwerkverbindung zu Datenbanken ist noch von anderer EXE vorhanden.
Viele Grüße
Wolfgang
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: Keine Reaktion mehr nach Aufruf von Com Object

Beitrag von AUGE_OHR »

Wolfgang Ciriack hat geschrieben:

Code: Alles auswählen

oPcCom:destroy()
Wenn ich jedoch danach den Dialog schließe, bleibt mein komplettes Programm hängen -"Keine Rückmeldung" und Sanduhr.
hm ... ob das :destroy() "reicht" ?

ist würde einfach mal tippen das es eine Methode :close() geben müsste womit du den "Empfangs Kanal" schliessen kannst/musst ?
ich den da z.b. an Excel wo vor dem :quit() ja erst das Workbook mit :close() geschlossen werden muss.

wie sieht es auch mit :subscribeEvent() ? die muss/sollte man vorher per :unsubscribeEvent() aufheben.

und last but not least : in "welchem" Thread (Info) Nummer läuft es denn ... im selben wie dein Main ?
gruss by OHR
Jimmy
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Keine Reaktion mehr nach Aufruf von Com Object

Beitrag von Wolfgang Ciriack »

Hallo Jimmi,
wird subscribeEvent denn nicht nur für ActiveX Objekte benötigt ?
Ich habe ja nur ein AutomationObject, dass eine einfache Aktion (Wiegung und Protokollierung) durchführen soll, und mir das Ergebnis (Datum,Zeit,Gewicht,Protokollnummer) als String zurück gibt. Dieses funktioniert ja auch, in meinen Dialogfeldern erscheinen die richtigen Daten. Ich kann mich auch in dem Dialog noch zwischen den Feldern bewegen. Erst wenn ich den Dialog z.B. abrechen will, und mein Prog wieder auf Datenbanken zugreift, kommt der Stillstand.

Ja, läuft im selben Thread. Sollte man mal versuchen, dass in einem neuem Thread zu starten ?
Wie könnte mir denn ein neuer Thread den Empfangstring an meinen Main Thread zurückgeben ?
Viele Grüße
Wolfgang
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Keine Reaktion mehr nach Aufruf von Com Object

Beitrag von Rolf Ramacher »

Hi Wolfgang

ich gehe mal davon aus, das du aus deiner PRG, in der der Dialog definiert ist, das Fremdprogramm aufrufst. den codesnipsel,
den du gezeigt hast. ist dabei dein Dialog gesperrt. Versuch doch mal folgendes -
übergib den Dialog an die entsprechende Function

Code: Alles auswählen

mache :disable() 

und von dem Return cReive machst du

Code: Alles auswählen

oDlg:enable()
Setappfocus(oDlg)
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9357
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Keine Reaktion mehr nach Aufruf von Com Object

Beitrag von Tom »

Hallo, Wolfgang.

Schau Dir doch mal - während es noch aktiv ist - das Objekt mit DC_InspectObject() an. Ich denke, Jimmys Vermutung geht in die richtige Richtung - das Objekt erwartet noch den Aufruf irgendeiner Abschlussmethode, die Du dort vielleicht findest (wenn nicht in den Dokus). Es kann aber auch sein, dass die Klasse einfach schlecht programmiert ist. Sowas gibt's auch.

Ach so. Ich vermute mal, auf ALT-C reagiert Deine App auch nicht mehr, oder?
Herzlich,
Tom
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Keine Reaktion mehr nach Aufruf von Com Object

Beitrag von Wolfgang Ciriack »

Vielen Dank für die Ratschläge, werde in den nächsten Tagen beim Kunden vor Ort weiter testen.
Werde als erstes mal versuchen, ein oPcCom:close() einzubauen.
Viele Grüße
Wolfgang
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: Keine Reaktion mehr nach Aufruf von Com Object

Beitrag von AUGE_OHR »

Wolfgang Ciriack hat geschrieben:Ja, läuft im selben Thread.
bis du dir sicher :badgrin:
ab der SL1 1.9.355 haben wir ja den EVM Thread ...
Wolfgang Ciriack hat geschrieben:Sollte man mal versuchen, dass in einem neuem Thread zu starten ?
zumindest sollte man mit ThreadID() feststellen in welchem er läuft.
du könntest auch mal mit

Code: Alles auswählen

  ::UserEvents      := .F.
  ::UseGUIthread    := .F.
experimentieren.
Wolfgang Ciriack hat geschrieben:Wie könnte mir denn ein neuer Thread den Empfangstring an meinen Main Thread zurückgeben ?
ich mache es immer per

Code: Alles auswählen

PostAppEvent(MyUserDef,cString1,cString2,oMain)
was dann in der Main ankommen sollte

Code: Alles auswählen

#define MyUserDef xbeP_User + 100
...
nEvent := xbe_None
DO WHILE !lExit
   nEvent := APPEVENT( @mp1, @mp2, @oXbp )
   DO CASE
      CASE nEvent == MyUserDef
          cString1 := mp1
          cString2 := mp2
gruss by OHR
Jimmy
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Keine Reaktion mehr nach Aufruf von Com Object

Beitrag von Wolfgang Ciriack »

Danke Jimmi.
Viele Grüße
Wolfgang
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2934
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Keine Reaktion mehr nach Aufruf von Com Object

Beitrag von Wolfgang Ciriack »

Vielen Dank noch einmal an alle,
nach Rücksprache mit dem Hersteller, hat ein

Code: Alles auswählen

oPcCom:close(1)
das Problem beseitigt. :)
Viele Grüße
Wolfgang
Antworten