PLServer von NordicId verwenden
Moderator: Moderatoren
- Klaus Schuster
- Foren-Administrator
- Beiträge: 370
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
PLServer von NordicId verwenden
Hallo,
hat es jemand geschafft Nachrichten des PLServers (OCX) zu verarbeiten?
Ich habe diesen mit
oPLServer := GetObject( , 'PLSERVER.PLServerCtrl.1' )
und
oPLServer:dynamicCast( ActiveXObject() )
erfolgreich in ein Objekt der Klasse ActiveXObject überführt, schaffe es aber nicht, eingehende Nachrichten zu empfangen.
hat es jemand geschafft Nachrichten des PLServers (OCX) zu verarbeiten?
Ich habe diesen mit
oPLServer := GetObject( , 'PLSERVER.PLServerCtrl.1' )
und
oPLServer:dynamicCast( ActiveXObject() )
erfolgreich in ein Objekt der Klasse ActiveXObject überführt, schaffe es aber nicht, eingehende Nachrichten zu empfangen.
Gruß Klaus
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: PLServer von NordicId verwenden
wenn du Events empfangen willst solltest du statt GetObject / DynamicCast() es mal mit XbpActiveXControl() versuchen und mit o:subscribeEvent() ein Ereignis abonnieren. Da hierfür meistens Konstanten verwendet werden solltest du mitKlaus Schuster hat geschrieben:erfolgreich in ein Objekt der Klasse ActiveXObject überführt, schaffe es aber nicht, eingehende Nachrichten zu empfangen.
Code: Alles auswählen
Tlb2Ch.exe CLSID
CLSID = 'PLSERVER.PLServerCtrl.1'
gruss by OHR
Jimmy
Jimmy
- Klaus Schuster
- Foren-Administrator
- Beiträge: 370
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: PLServer von NordicId verwenden
Hallo Jimmy,
Danke für Deine Antwort!
GetObject() habe ich verwandt, da in der Hilfe von Alaska unter diesem Beispiel die Behandlung von Nachrichten erwähnt wird. Kann ich analog zu ActiveXObject() auch XbpActiveXControl() verwenden?
::ActiveXControl1 := XbpActiveXControl():new( ::drawingArea, , {48,96}, {924,564} )
::ActiveXControl1:CLSID := '{244758C6-A002-11D2-B82B-938DAECFCE37}'
Das Control stellt eine Fenster zur Verfügung.
Danke für Deine Antwort!
GetObject() habe ich verwandt, da in der Hilfe von Alaska unter diesem Beispiel die Behandlung von Nachrichten erwähnt wird. Kann ich analog zu ActiveXObject() auch XbpActiveXControl() verwenden?
::ActiveXControl1 := XbpActiveXControl():new( ::drawingArea, , {48,96}, {924,564} )
::ActiveXControl1:CLSID := '{244758C6-A002-11D2-B82B-938DAECFCE37}'
Das Control stellt eine Fenster zur Verfügung.
Gruß Klaus
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: PLServer von NordicId verwenden
man benötigt meistens ein "Fenster" an das man einen Event schicken kann.Klaus Schuster hat geschrieben:Das Control stellt eine Fenster zur Verfügung.
wichtig ist nun das man mit o:subscribeEvent() ein Ereignis abonniert denn nur dann kannst du es auswerten und darauf reagieren.
gruss by OHR
Jimmy
Jimmy
- Klaus Schuster
- Foren-Administrator
- Beiträge: 370
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: PLServer von NordicId verwenden
Hallo Jimmy,
vorab Danke. Am Dienstag bekomme ich ein Gerät zum Testen. Mal sehen, ob es mir gelingt, die Nachrichten erhalten, verarbeiten und beantworten zu können.
vorab Danke. Am Dienstag bekomme ich ein Gerät zum Testen. Mal sehen, ob es mir gelingt, die Nachrichten erhalten, verarbeiten und beantworten zu können.
Gruß Klaus
- AUGE_OHR
- Marvin
- Beiträge: 12911
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: PLServer von NordicId verwenden
hi,
hoffe das du dann auch eine Dokumentation über das *.OCX bekommst.
wenn nicht dann sie dir mal "HTML Help COM Assistant" an
http://www.devcomponents.com/
hoffe das du dann auch eine Dokumentation über das *.OCX bekommst.
wenn nicht dann sie dir mal "HTML Help COM Assistant" an
http://www.devcomponents.com/
gruss by OHR
Jimmy
Jimmy
- Klaus Schuster
- Foren-Administrator
- Beiträge: 370
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: PLServer von NordicId verwenden
Hallo Jimmy,
folgender Code führt zu einem Absturz mit dem Exit-Code -1073741819, sobald eine Nachricht an den PLServer gesendet wird (ein Barcode eingescannt wurde):
Von einem Kollegen, der den PLServer schon häufig in Delphi eingebunden hat, habe ich eine Datei mit Dispatch-Ids bekommen.
Für den Fall, dass Du die gesamte Datei benötigst, ist diese angehängt
Der Abschnitt mit der Methode 'DataArrived' deren Ereignisse behandelt werden sollen, lautet
Hast Du eine Idee?
folgender Code führt zu einem Absturz mit dem Exit-Code -1073741819, sobald eine Nachricht an den PLServer gesendet wird (ein Barcode eingescannt wurde):
Code: Alles auswählen
#include "Appevent.ch"
#include "Common.ch"
#include "Font.ch"
#include "Gra.ch"
#include "Xbp.ch"
#pragma library( "ascom10.lib" )
CLASS _NewForm FROM XbpDialog
EXPORTED:
VAR editControls
* Enthaltene Kontrollelemente
VAR ActiveXControl1
METHOD init
METHOD create
ENDCLASS
******************************************************************************
* Formular initialisieren
******************************************************************************
METHOD _NewForm:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
DEFAULT oParent TO AppDesktop(), ;
aPos TO {474,141}, ;
lVisible TO .F.
DEFAULT aPP TO {}
AAdd ( aPP, { XBP_PP_COMPOUNDNAME, "8.Arial" } )
IF Empty(aSize) == .T.
IF IsMemberVar(self,"ClientSize") == .T.
aSize := {0,0}
ELSE
aSize := {1024,768}
ENDIF
ENDIF
::XbpDialog:init( oParent, oOwner, aPos, aSize, aPP, lVisible )
IF aSize[1] == 0 .AND. aSize[2] == 0
::XbpDialog:ClientSize := {1016,740}
ENDIF
::XbpDialog:taskList := .T.
::XbpDialog:title := "Neues Formular"
::editControls := {}
::ActiveXControl1 := XbpActiveXControl():new( ::drawingArea, , {48,96}, {924,564} )
::ActiveXControl1:CLSID := '{244758C6-A002-11D2-B82B-938DAECFCE37}'
::ActiveXControl1:subscribeEvent( 1, {|| MsgBox( 'Gut so' )})
RETURN self
******************************************************************************
* Systemresourcen anfordern
******************************************************************************
METHOD _NewForm:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
::XbpDialog:create( oParent, oOwner, aPos, aSize, aPP, lVisible )
::ActiveXControl1:create()
RETURN self
Für den Fall, dass Du die gesamte Datei benötigst, ist diese angehängt
Der Abschnitt mit der Methode 'DataArrived' deren Ereignisse behandelt werden sollen, lautet
- // *********************************************************************//
// DispIntf: _DPLServerEvents
// Flags: (4096) Dispatchable
// GUID: {785739C4-A288-11D2-B82B-8D8A650ADC32}
// *********************************************************************//
_DPLServerEvents = dispinterface
['{785739C4-A288-11D2-B82B-8D8A650ADC32}']
procedure DataArrived(id: Integer; frameid: Smallint); dispid 1;
Hast Du eine Idee?
Gruß Klaus
- Klaus Schuster
- Foren-Administrator
- Beiträge: 370
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: PLServer von NordicId verwenden
Die Dateiendung .pas war nicht erlaubt. Nun als .txt.
- Dateianhänge
-
- PLSERVERLib_TLB_7.0.0.txt
- (40.04 KiB) 450-mal heruntergeladen
Gruß Klaus
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: PLServer von NordicId verwenden
Falls eine Dateiendung nicht erlaubt ist, kann man entweder ZIPpen oder .TXT anhängen, z.B. x.PAS.TXT ... so bleibt immer noch sichtbar was für ein Format gedacht war ![Wink ;-)](./images/smilies/wink.gif)
![Wink ;-)](./images/smilies/wink.gif)
Gruß
Hubert
Hubert
- Klaus Schuster
- Foren-Administrator
- Beiträge: 370
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: PLServer von NordicId verwenden
du solltest auf jeden fall mit dem von jimmy erwähnten tool eine CH Datei erstellen, so wie es in den Beispielen von Alaska zu Excel etc. auch erstellt wurde.
In dieser kannst du nachsehen was wie benötigt und vorhanden ist, PAS Code verstehen hier eher weniger und die Unterschiede insbesondere bei den Daten sind doch erheblich.
Ich vermute du musst events verarbeiten, die vom Server kommen, das geht entweder nur über den CALLBACK Compiler von Pablo oder
direkt mit dem umgewandelten ComObjekt, wie du es erwähnt hast. Ich kenne mich damit nicht so aus.
In dieser kannst du nachsehen was wie benötigt und vorhanden ist, PAS Code verstehen hier eher weniger und die Unterschiede insbesondere bei den Daten sind doch erheblich.
Ich vermute du musst events verarbeiten, die vom Server kommen, das geht entweder nur über den CALLBACK Compiler von Pablo oder
direkt mit dem umgewandelten ComObjekt, wie du es erwähnt hast. Ich kenne mich damit nicht so aus.
Gruß
Hubert
Hubert
- Klaus Schuster
- Foren-Administrator
- Beiträge: 370
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: PLServer von NordicId verwenden
Hallo Hubert,
Danke für Deine Antwort. Kannst Du mir bei dem Tool Tlb2Ch helfen?!
Wenn ich 'Tlb2Ch 244758C6-A002-11D2-B82B-938DAECFCE37' auf der Commandozeile eingebe und bestätige erhalte ich die Meldung 'Ungültige Klassenzeichenfolge'. Woran kann das liegen?
Danke für Deine Antwort. Kannst Du mir bei dem Tool Tlb2Ch helfen?!
Wenn ich 'Tlb2Ch 244758C6-A002-11D2-B82B-938DAECFCE37' auf der Commandozeile eingebe und bestätige erhalte ich die Meldung 'Ungültige Klassenzeichenfolge'. Woran kann das liegen?
Gruß Klaus
- brandelh
- Foren-Moderator
- Beiträge: 15699
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 68 Mal
- Danksagung erhalten: 34 Mal
- Kontaktdaten:
Re: PLServer von NordicId verwenden
ich selbst habe das noch nicht gemacht, da ich nur DLL oder die fertigen Excel.ch / Word.ch nutze.
Möglicherweise muss man die GUID einschließen, in deinem Beispiel sieht es so aus, als ob {} dafür genutzt werden:
Tlb2Ch {244758C6-A002-11D2-B82B-938DAECFCE37}
da ich diese aber nicht habe bekommte ich eine andere Fehlermeldung.
AUGE_OHR oder TOM nutzen das Programm sicher häufiger.
Jimmy hat auch einen COM Browser erwähnt, damit kann man auch an die Infos kommen.
Möglicherweise muss man die GUID einschließen, in deinem Beispiel sieht es so aus, als ob {} dafür genutzt werden:
Tlb2Ch {244758C6-A002-11D2-B82B-938DAECFCE37}
da ich diese aber nicht habe bekommte ich eine andere Fehlermeldung.
AUGE_OHR oder TOM nutzen das Programm sicher häufiger.
Jimmy hat auch einen COM Browser erwähnt, damit kann man auch an die Infos kommen.
Gruß
Hubert
Hubert
- Klaus Schuster
- Foren-Administrator
- Beiträge: 370
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: PLServer von NordicId verwenden
Guter Mann, sowohl die von Dir vorgeschlagene Lösung als auch
Tlb2Ch PLSERVER.PLSERVERCTRL.1
haben eine Headerdatei erstellt; allerdings weitgehend leer. Sie enthält nur
Tlb2Ch PLSERVER.PLSERVERCTRL.1
haben eine Headerdatei erstellt; allerdings weitgehend leer. Sie enthält nur
Code: Alles auswählen
////////////////////////////////////////////////////////////////////////////////
//
// Automatisch generiertes Header File
//
// Programm ID: PLSERVER.PLSERVERCTRL.1
//
// Erstellungs Datum: 31.07.2014
//
// Erstellungs Werkzeug: Tlb2Ch.exe
//
// Copyright (c) Alaska Software. Alle Rechte vorbehalten.
//
////////////////////////////////////////////////////////////////////////////////
#ifndef _PLSERVER_PLSERVERCTRL_1_HAEDER_DAEMON
#define _PLSERVER_PLSERVERCTRL_1_HAEDER_DAEMON
#endif //_PLSERVER_PLSERVERCTRL_1_HAEDER_DAEMON
Gruß Klaus
Re: PLServer von NordicId verwenden
Hallo Klaus,
ist das Thema noch aktuell ?
Wir setzen den PlServer von NordicId in Verbindung mit Xbase ein. Ist ein paar Jahre her, dass wir das geschrieben haben.
Läuft, wenn es einmal steht, völlig stabil und wartungsfrei. Ich kann gerne nachsehen, wie es geht, wenn du noch Probleme hast.
Gruß
Udo
ist das Thema noch aktuell ?
Wir setzen den PlServer von NordicId in Verbindung mit Xbase ein. Ist ein paar Jahre her, dass wir das geschrieben haben.
Läuft, wenn es einmal steht, völlig stabil und wartungsfrei. Ich kann gerne nachsehen, wie es geht, wenn du noch Probleme hast.
Gruß
Udo
- Klaus Schuster
- Foren-Administrator
- Beiträge: 370
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: PLServer von NordicId verwenden
Hallo Udo,
das Thema ist noch aktuell! Es würde mich sehr freuen, wenn Du mir ein wenig Code geben, so dass die Herangehensweise klar wird.
Herzlich Dank im voraus
Klaus
das Thema ist noch aktuell! Es würde mich sehr freuen, wenn Du mir ein wenig Code geben, so dass die Herangehensweise klar wird.
Herzlich Dank im voraus
Klaus
Gruß Klaus
Re: PLServer von NordicId verwenden
Hallo Klaus,
da (wie immer) die Zeit knapp ist, hier nur kurz skizziert, wie wir den Einstieg gemacht haben (s.u.).
Wichtig!
Ich kann mich erinnern, dass die Xbase ActiveX Schnittstelle mit neueren PLServer.ocx Versionen nicht mehr funktionierte!
Wir benutzen den Stand 4.7.0 vom 20.12.2004. Da es damit nie Probleme gab, haben wir das Thema nicht weiter verfolgt.
Möglich, dass sich das mit der aktuellen Xbase Version auch geändert hat.
Für die Programmierung brauchst du zwingend das Developer Guide; gibt es als PDF bei NordicId.
Hier findest du alles was du zur Programmierung brauchst (z.B. ConnectToSerialServer() usw )
Es ist ein ganzes Stück Arbeit sich da einzudenken, aber dann geht's.
Glück Auf!
Udo
da (wie immer) die Zeit knapp ist, hier nur kurz skizziert, wie wir den Einstieg gemacht haben (s.u.).
Wichtig!
Ich kann mich erinnern, dass die Xbase ActiveX Schnittstelle mit neueren PLServer.ocx Versionen nicht mehr funktionierte!
Wir benutzen den Stand 4.7.0 vom 20.12.2004. Da es damit nie Probleme gab, haben wir das Thema nicht weiter verfolgt.
Möglich, dass sich das mit der aktuellen Xbase Version auch geändert hat.
Für die Programmierung brauchst du zwingend das Developer Guide; gibt es als PDF bei NordicId.
Hier findest du alles was du zur Programmierung brauchst (z.B. ConnectToSerialServer() usw )
Es ist ein ganzes Stück Arbeit sich da einzudenken, aber dann geht's.
Glück Auf!
Udo
Code: Alles auswählen
* -------------------------------- PLSERVER -------------------------
#define PEV_DATAARRIVED 1
#define PEV_WHAT 4
* --------------------------------------------------------------------
...
* ---------------- Active X PLServer Componente ---------------
oAx := XbpActiveXControl():new( oDa, , {10, aSize[2]-140}, {340,100} )
oAx:CLSID := "{244758C6-A002-11D2-B82B-938DAECFCE37}"
oAx:TabStop := .T.
oAx:create()
oAx:subscribeEvent(PEV_DATAARRIVED,{|p1,p2|DataArrived(p1,p2) })
oAx:subscribeEvent(PEV_WHAT ,{|p1,p2|WhatArrived(p1,p2) })
...
Verbinde(@oAx, @oInfo)
lExit := .F.
DO WHILE !lExit
nEvent := AppEvent( @mp1, @mp2, @oXbp )
oXbp:handleEvent( nEvent, mp1, mp2 )
IF nEvent == xbeP_Close
lExit := .T.
ENDIF
ENDDO
Entbinde(@oAx, @oInfo)
FUNCTION verbinde(oAX,oInfo)
* ---- konkret mit 2 Empf„ngern -------------
LOCAL cText := ""
MEMVAR cIPadr1,cIPadr2,cPort1,cPort2
/* für Picco Nachfolger mit WinMobile und Emulator über WLAN
* oAx:StartServer(2000)
*/
IF !empty(cIPadr1)
nConnId := oAx:ConnectToSerialServer(cIpAdr1,val(cPort1))
ENDIF
IF nConnId = -1
*msgbox("Kein Kontakt")
cText += "Kein Kontakt zu "+cIpAdr1
ELSE
*msgbox("Verbunden!")
cText += "Verbunden!"+str(nConnId)
ENDIF
IF !empty(cIPadr2)
nConnId := oAx:ConnectToSerialServer(cIpAdr2,val(cPort2))
ENDIF
IF nConnId = -1
*msgbox("Kein Kontakt")
cText += " Kein Kontakt zu "+cIpAdr2
ELSE
*msgbox("Verbunden!")
cText += " Verbunden!"+str(nConnId)
ENDIF
oInfo:setcaption(cText)
RETURN (cText)
FUNCTION entbinde(oAX,oInfo)
oAx:DisconnectSerialServer(nConnId)
oInfo:setcaption(":")
RETURN NIL
- Klaus Schuster
- Foren-Administrator
- Beiträge: 370
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: PLServer von NordicId verwenden
Hallo Udo,
Danke für Deine Arbeit. Sobald ich etwas Neues weiß, melde ich mich.
Danke für Deine Arbeit. Sobald ich etwas Neues weiß, melde ich mich.
Gruß Klaus