Com-Objekt "per referenz" übergeben

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Com-Objekt "per referenz" übergeben

Beitrag von mini990 »

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: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Com-Objekt "per referenz" übergeben

Beitrag von AUGE_OHR »

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
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Com-Objekt "per referenz" übergeben

Beitrag von mini990 »

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: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Com-Objekt "per referenz" übergeben

Beitrag von AUGE_OHR »

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
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Com-Objekt "per referenz" übergeben

Beitrag von mini990 »

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: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Com-Objekt "per referenz" übergeben

Beitrag von AUGE_OHR »

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