Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Anmeldungen zum Forentreffen 2018 sind auf der Anmeldeseite möglich
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

Com-Objekt "per referenz" übergeben

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
Benutzeravatar
mini990
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 330
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.

Com-Objekt "per referenz" übergeben

Beitrag von mini990 » Di, 14. Apr 2015 11:37

Hallo,
ich möchte ein COM-Objekt an ein zweites per Referenz übergeben.
Geht das mit Xbase? Oderot4xb?

Was muss ich nach:

_dh_CreateObject(L("HXX.ApplicationObject"),0,@xlApp)

tun damit das zum Active-X Objekt wird.
Habe leider nichts gefunden wie ich "dynamiccast" hier verwenden kann...

Gruß Stefan

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10654
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Com-Objekt "per referenz" übergeben

Beitrag von AUGE_OHR » Mi, 15. Apr 2015 0:00

mini990 hat geschrieben:Was muss ich nach:

_dh_CreateObject(L("HXX.ApplicationObject"),0,@xlApp)

tun damit das zum Active-X Objekt wird.
Habe leider nichts gefunden wie ich "dynamiccast" hier verwenden kann...
leider wirst du auch mit DynamicCast nicht weiterkommen ... es steht bei Pablo auf der "todo" Liste.
ot4xb.public
Re: DispHPR / ot4xb
Start 01.10.2015

Was planned to provide a sink helper object inside ot4xb,not a priority but as not so much complex will try to include in the next ot4xb release
If you have not planned to run your objects on a separate thread AutomationObject():Create( pInterface ) probably still the easy solution

Depending on your thread model may happen that after you create your own sink object still having same delay receiving COM events that with the Xbase++ AX implementation, and this is because AppEvent() not in alertable state all the time but intermitent
p.s. das letzte was ich versucht habe waren 2 Threads wobei ich DispHPR.DLL immer dann verwendet habe wenn es "lange dauert" und kein Event vor Abschluss zu erwarten ist.
gruss by OHR
Jimmy

Benutzeravatar
mini990
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 330
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.

Re: Com-Objekt "per referenz" übergeben

Beitrag von mini990 » Di, 19. Mai 2015 10:08

Hallo nochmal,
ich komme an dieser Stelle einfach nicht weiter.....

Programmbeispiel:

Code: Alles auswählen

$appobj = new-object -comobject praxisCENTER3.ApplicationObject

$med = new-object -comobject praxisCENTER3.Medicament
foreach ($presMed in $prescription)
{
	# $presMed.PIC

	$appobj.GetMedicament($presMed.PIC,[ref]$med)
	# Ausgabe der Eigenschaften in der Console
	$med.PIC
	$med.narcoticaddition
	$med.Homeopathic

}
#$prescription.Count
#$presMed = $prescription.Item(0)
#$presMed.PIC


$appobj.Hide()
$appobj.Close()
Hier mein umgesetzter Code:

Code: Alles auswählen

  oIfap := CreateObject("PraxisCENTER3.ApplicationObject")

	oMed := CreateObject("PraxisCENTER3.Medicament")
	oMed := oMed:dynamicCast ( ActiveXObject() )
  for i:=0 to oPat:Prescription:Count-1
			oIfap:GetMedicament(cPZN, omed)
   next i
Das Problem stellt die Funktion getmedicament dar.
Das Objekt "Med" wird als "[ref]$med" übergeben.
bedeutet doch dass ich das Objekt oMed "per Referenz" übergeben muss.
Wie kann ich diese Referenz erzeugen?

Gruß Stefan

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10654
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Com-Objekt "per referenz" übergeben

Beitrag von AUGE_OHR » Di, 19. Mai 2015 19:25

hi,

ein COM Object muss nicht, wie eine Xbase++ Class, Propertys (Eigenschaften) haben sondern könnte auch eine STRUCTURE sein ( ähnlich einer DBF ).
ein DynamicCast() wendet man üblicherweise auf ein COM Object (CreateObject) an um Events zu empfangen.

da nun eine FOREACH vorliegt "könnte" man ComEvalCollection() versuchen wobei im Codeblock die Auswertung geschieht.

wenn du eine FOR / NEXT verwendest dann musst du auch den "Zähler" mitführen welches auf die einzelnen Items zugreift.

wenn es eine STRUCTURE ist müsstest du mit GwstArrayNext(oCOM) zum nächsten "Satz skippen"

Code: Alles auswählen

   //
   // now we use TBBUTTON Structure fill Structure Member
   // and use GwstArrayNext(oBtn) to go to the next item
   //
   oBtn := TBBUTTON():New()
   pBtnArray := _xgrab( oBtn:_sizeof_() * button_count )
   oBtn:_link_(  pBtnArray , .F. ) // link to the first item

   nNo := 1
   for nNo := 1 to button_count
      // .....assign member values

      GwstArrayNext( oBtn) // go to the next item
   next
was mit hier fehlt ist $prescription ... wo kommt das her ?

Code: Alles auswählen

#$prescription.Count
#$presMed = $prescription.Item(0)
p.s. wenn du ein VB Sample findest ... das ich "leichter" nach Xbase++ zu "übersetzen"
gruss by OHR
Jimmy

Benutzeravatar
mini990
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 330
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.

Re: Com-Objekt "per referenz" übergeben

Beitrag von mini990 » Mi, 20. Mai 2015 8:00

Hallo Jimmy,
die For-Next Schleife funktioniert.
prescription ist eine Liste. Auch das funktioniert.

Mein Problem ist genau das: $appobj.GetMedicament($presMed.PIC,[ref]$med)
Das farbig markierte......

Gruß Stefan

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 10654
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: Com-Objekt "per referenz" übergeben

Beitrag von AUGE_OHR » Mi, 20. Mai 2015 16:17

wir hatten die Diskussion schon vor 1 Jahr ... http://www.xbaseforum.de/viewtopic.php?f=28&t=7899

Code: Alles auswählen

Function GetMedicament (Value: WideString, var Medicament: IMedicament): Integer;
hattest du

Code: Alles auswählen

oifap:GetMedicament(nPZN, oMed:interface)
ausprobiert ?
gruss by OHR
Jimmy

Antworten