[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/privacyprotection/cron/task/anonymize_ip.php on line 83: A non-numeric value encountered
Inoffizielles deutsches Xbase-Forum • Anfängerfrage Active X und Xbase++
Seite 1 von 1

Anfängerfrage Active X und Xbase++

Verfasst: Mi, 17. Jun 2009 12:55
von mkersch
Hallo Forenmitglieder,

da ich nur ab und zu ein Xbase++ Programm schreibe, bin ich nicht so fit mit dieser Programmiersprache.
Deshalb wende ich mich an Euch, mit der Bitte um Hilfe.

Aufgabenstellung:

Für ein aktuelles Projekt muß ich eine Kommunikation zu einer Beckhoffsteuerung aufbauen.

Ich könnte mit der mitgelieferten DLL,s diese Kommunikation realisieren, jedoch ist dies sehr zeitaufwendig.

Deshalb möchte ich dies mit den mitgelieferten Active-X Elementen lösen.

Wie kann ich Active X Elemente in Xbase++ einbinden ? (Habe Version 1.82)
Kann man wie bei Labview bzw. Vbasic dies mit einer IDE realisieren ? (Habe in Labview bzw. VBasic bereits Active X Elemnte verwendet)

Gibt es einfache Beispielprogramm in denen das einbinden von Active X gezeigt wird ?
Wie würdet ihr diese Aufgabe angeben ?
Was muß man beachten ?

Im Voraus vielen Dank für Eure Bemühungen.

mfg.

mkersch

Re: Anfängerfrage Active X und Xbase++

Verfasst: Mi, 17. Jun 2009 13:08
von Tom
Hallo, Mkersch.

Active X mit "Bordmitteln" geht erst ab Xbase++ 1.9. Mit der 1.82 müsstest Du zusätzlich das (nicht mehr supportete) "JazzAge" von Philippe Monteil oder "XCockpit" von Michael Hoffmann nutzen. Wenn die notwendigen Funktionen aber als DLLs zur Verfügung stehen, ist das eigentlich der bequemere Weg, zumal Control-Registrierung und einiges andere an Ungemach wegfallen. Der Form-Designer von Xbase++ unterstützt die Platzierung von AX-Controls, aber es sieht nicht immer so aus wie später im laufenden Programm. Aber, wie gesagt - erst ab Version 1.9.

Re: Anfängerfrage Active X und Xbase++

Verfasst: Mi, 17. Jun 2009 13:51
von Michael Rudrich
Hi...

auch ich rate Dir auf 1.9 zu gehen, wenn Du dann Beispiel-Source aus VB hast wird die Sache
relativ einfach.
Mit Jazzage würde ich nicht mehr rummachen - denn keiner weiß wo Philippe jetzt steckt ;-))

Grüße
Michl

Re: Anfängerfrage Active X und Xbase++

Verfasst: Do, 18. Jun 2009 11:39
von mkersch
Hallo Forenmitglieder,

vielen Dank für die schnelle Antwort.

Habe jetzt eine ActiveX Controll unter Xbase Version 1.9 eingebunden.

Funktioniert im Prinzip !

Im Detail habe ich noch ein kleines Problem. Und zwar wird eine Methode obj:AdsSyncReadIntegerVarReg(Handle,Anzahl,Variable)
aufgerufen, die drei Parameter hat.

1. Handle
2. Anzahl zu lesender Bytes (in meinen Fall 2 für eine Integervariable)
3. Variable in die der Wert geschrieben wird.

==> Dabei bekomme ich einen Fehlercode als Rückgabe ==> Invalid Variable
Ich denke das Problem liegt in der Xbase Variable die keine definierte Typdefiniton hat (Länge).
Wie kann ich (einfach) eine Xbase Variable als Type INT (2 Bytes) definieren.

mfg.
mkersch

Re: Anfängerfrage Active X und Xbase++

Verfasst: Do, 18. Jun 2009 11:49
von Michael Rudrich
Hi..
womit ist die Variable denn initialisiert?

Sowas: nVar := 0 ??

Gruß
Michl

Re: Anfängerfrage Active X und Xbase++

Verfasst: Do, 18. Jun 2009 11:57
von AUGE_OHR
mkersch hat geschrieben:Und zwar wird eine Methode obj:AdsSyncReadIntegerVarReg(Handle,Anzahl,Variable)
aufgerufen, die drei Parameter hat.
... was nicht heisst das du die 3 Parameter "so" übergeben kannst.

Code: Alles auswählen

// vorbelegen
LOCAL Anzahl   := 0
LOCAL Variable := ""
...
   bSaveError := ErrorBlock()
   ErrorBlock( {|e| Break(e)} ) 
   BEGIN SEQUENCE   
      IF IsMethod( oObject, "AdsSyncReadIntegerVarReg")
          //  per @ reference ? 
          oObject:callMethod( "AdsSyncReadIntegerVarReg",Handle,@Anzahl,@Variable )
      endif
   RECOVER USING oError 
      ErrorBlock( bSaveError ) 
      IF oError:osCode == ...
      ENDIF
   END SEQUENCE
   ErrorBlock( bSaveError ) 
falls du dennoch eine Typen Konvertierung benötigst findest du die Type ebenfalls unter callMethod()

Re: Anfängerfrage Active X und Xbase++

Verfasst: Do, 18. Jun 2009 12:47
von brandelh
Hi,

wenn bei einem Funktionsaufruf die Variable (cVar) 2 Bytes aufnehmen und zurückliefen soll, muss man
  • Die Variable mit genügend Platz vorbelegen (bei reinem Xbase++ natürlich nicht): cVar := " " // 2 Blanks
  • Die Variable per Referenz übergeben: MyFunk( @cVar)
  • Den Wert richtig interpretieren ... Bei Strings oder Char ist das schon richtig so, ansonsten Bin2i() oder Bin2w() verwenden.
Bei Xbase Methoden ist das genauso, bei DLL bzw. ActiveX Aufrufen muss man wie Jimmy gezeigt hat als ersten Parameter das Objekt (Methode / Funktionsname) selbst überbeben.

Re: Anfängerfrage Active X und Xbase++

Verfasst: Mo, 22. Jun 2009 8:34
von mkersch
Hallo Forenmitglieder,

vielen Dank für Eure Hilfe.

Nochmal eine Frage zu ActiveX.

Habe mit den Formdesigner Xbase++1.9 eine Activex Control eingefügt und entsprechend zugeordnet (ADSOCX).

Die Funktion isMethod(oXbpAx,"AdsCreateHandle") gibt false zurück.

Was mache ich falsch bzw. wie kann ich kontrollieren ob das Active Control aktiv ist ?

In der Beschreibung von Beckhoff ==>
objekt.AdsCreateHandle(
varName As String,
hvar As Long)
As Long

Mein Code:
hvar := 0
oXbpAx := callMethod("AdsCreateHandle",""Var1",hvar)

==> nach Aufruf hvar = 0


mfg.

mkersch

Re: Anfängerfrage Active X und Xbase++

Verfasst: Mo, 22. Jun 2009 11:16
von Wolfgang Ciriack
Hallo,
probiers mal per Referenz

Code: Alles auswählen

oXbpAx := callMethod("AdsCreateHandle",""Var1",@hvar)

Re: Anfängerfrage Active X und Xbase++

Verfasst: Mo, 22. Jun 2009 11:34
von mkersch
Vielen Dank für die Unterstützung

Wenn ich die Übergabe per Referenz mache ==> @hVar kommt eine
Xbase Fehlermeldung ==> Automation/6500 ==> Typkonflikt


Ich denke das Problem liegt in der Xbasse++ Variablen.
==> die ActiveX Methode benötigt eine long Variable (hVar) in die diese Methode den Handle
liefert.

==> Bei meinen wir der Inhalt dieser Variable nie verändert, also schreibt die Methode auch nichts hinein.

Was für Möglichkeiten habe ich um eine Typdefinierte Variable zu generieren bzw. zu übergeben.
Habe bereits mit folgender Funktion probiert hVar := Bin2L("0")


mfg.
mkersch

Re: Anfängerfrage Active X und Xbase++

Verfasst: Mo, 22. Jun 2009 14:53
von brandelh
mkersch hat geschrieben:hVar := Bin2L("0")
aber die Syntax ist falsch. Bin2L() ist das Gegenteil von L2Bin() beide Funktionen benötigen Variablen als Parameter:

Code: Alles auswählen

n := 0 // dies ist die Numerische Vorgabe - Variable mit 0
cBin := L2Bin(n) // zur Übergabe umwandeln, wobei das bei DLL automatisch geht
Funktionsaufruf mit  @cBin
n := Bin2L(cBin) // wurde hier etwas geändert ???

Re: Anfängerfrage Active X und Xbase++

Verfasst: Mo, 22. Jun 2009 16:24
von mkersch
Vielen Dank funktioniert !