Anfängerfrage Active X und Xbase++
Moderator: Moderatoren
Anfängerfrage Active X und Xbase++
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
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
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 105 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Anfängerfrage Active X und Xbase++
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.
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
Tom
-
- UDF-Programmierer
- Beiträge: 94
- Registriert: Do, 22. Dez 2005 16:37
Re: Anfängerfrage Active X und Xbase++
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
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++
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
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
-
- UDF-Programmierer
- Beiträge: 94
- Registriert: Do, 22. Dez 2005 16:37
Re: Anfängerfrage Active X und Xbase++
Hi..
womit ist die Variable denn initialisiert?
Sowas: nVar := 0 ??
Gruß
Michl
womit ist die Variable denn initialisiert?
Sowas: nVar := 0 ??
Gruß
Michl
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Anfängerfrage Active X und Xbase++
... was nicht heisst das du die 3 Parameter "so" übergeben kannst.mkersch hat geschrieben:Und zwar wird eine Methode obj:AdsSyncReadIntegerVarReg(Handle,Anzahl,Variable)
aufgerufen, die drei Parameter hat.
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 )
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Anfängerfrage Active X und Xbase++
Hi,
wenn bei einem Funktionsaufruf die Variable (cVar) 2 Bytes aufnehmen und zurückliefen soll, muss man
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.
Gruß
Hubert
Hubert
Re: Anfängerfrage Active X und Xbase++
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
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
- Wolfgang Ciriack
- Der Entwickler von "Deep Thought"
- Beiträge: 2950
- Registriert: Sa, 24. Sep 2005 9:37
- Wohnort: Berlin
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: Anfängerfrage Active X und Xbase++
Hallo,
probiers mal per Referenz
probiers mal per Referenz
Code: Alles auswählen
oXbpAx := callMethod("AdsCreateHandle",""Var1",@hvar)
Viele Grüße
Wolfgang
Wolfgang
Re: Anfängerfrage Active X und Xbase++
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
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
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Anfängerfrage Active X und Xbase++
aber die Syntax ist falsch. Bin2L() ist das Gegenteil von L2Bin() beide Funktionen benötigen Variablen als Parameter:mkersch hat geschrieben:hVar := Bin2L("0")
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
Hubert