Anfängerfrage Active X und Xbase++

Nutzung, Komponenten, .NET

Moderator: Moderatoren

Antworten
mkersch
UDF-Programmierer
UDF-Programmierer
Beiträge: 89
Registriert: Fr, 12. Mai 2006 13:26
Wohnort: Wünricht

Anfängerfrage Active X und Xbase++

Beitrag 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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Anfängerfrage Active X und Xbase++

Beitrag 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.
Herzlich,
Tom
Michael Rudrich
UDF-Programmierer
UDF-Programmierer
Beiträge: 94
Registriert: Do, 22. Dez 2005 16:37

Re: Anfängerfrage Active X und Xbase++

Beitrag 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
mkersch
UDF-Programmierer
UDF-Programmierer
Beiträge: 89
Registriert: Fr, 12. Mai 2006 13:26
Wohnort: Wünricht

Re: Anfängerfrage Active X und Xbase++

Beitrag 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
Michael Rudrich
UDF-Programmierer
UDF-Programmierer
Beiträge: 94
Registriert: Do, 22. Dez 2005 16:37

Re: Anfängerfrage Active X und Xbase++

Beitrag von Michael Rudrich »

Hi..
womit ist die Variable denn initialisiert?

Sowas: nVar := 0 ??

Gruß
Michl
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: Anfängerfrage Active X und Xbase++

Beitrag 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()
gruss by OHR
Jimmy
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Anfängerfrage Active X und Xbase++

Beitrag 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.
Gruß
Hubert
mkersch
UDF-Programmierer
UDF-Programmierer
Beiträge: 89
Registriert: Fr, 12. Mai 2006 13:26
Wohnort: Wünricht

Re: Anfängerfrage Active X und Xbase++

Beitrag 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
Benutzeravatar
Wolfgang Ciriack
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2932
Registriert: Sa, 24. Sep 2005 9:37
Wohnort: Berlin
Hat sich bedankt: 13 Mal
Danksagung erhalten: 34 Mal
Kontaktdaten:

Re: Anfängerfrage Active X und Xbase++

Beitrag von Wolfgang Ciriack »

Hallo,
probiers mal per Referenz

Code: Alles auswählen

oXbpAx := callMethod("AdsCreateHandle",""Var1",@hvar)
Viele Grüße
Wolfgang
mkersch
UDF-Programmierer
UDF-Programmierer
Beiträge: 89
Registriert: Fr, 12. Mai 2006 13:26
Wohnort: Wünricht

Re: Anfängerfrage Active X und Xbase++

Beitrag 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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Anfängerfrage Active X und Xbase++

Beitrag 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 ???
Gruß
Hubert
mkersch
UDF-Programmierer
UDF-Programmierer
Beiträge: 89
Registriert: Fr, 12. Mai 2006 13:26
Wohnort: Wünricht

Re: Anfängerfrage Active X und Xbase++

Beitrag von mkersch »

Vielen Dank funktioniert !
Antworten