PLServer von NordicId verwenden

Nutzung, Komponenten, .NET

Moderator: Moderatoren

PLServer von NordicId verwenden

Beitragvon Klaus Schuster » Mi, 18. Jun 2014 9:48

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.
Gruß Klaus
Benutzeravatar
Klaus Schuster
UDF-Programmierer
UDF-Programmierer
 
Beiträge: 93
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: PLServer von NordicId verwenden

Beitragvon AUGE_OHR » Mi, 18. Jun 2014 12:18

Klaus Schuster hat geschrieben:erfolgreich in ein Objekt der Klasse ActiveXObject überführt, schaffe es aber nicht, eingehende Nachrichten zu empfangen.
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 mit
Code: Alles auswählen
Tlb2Ch.exe CLSID

CLSID = 'PLSERVER.PLServerCtrl.1'
versuchen einen Header zu erstellen und den in eine *.CH umleiten.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10065
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: PLServer von NordicId verwenden

Beitragvon Klaus Schuster » Mi, 18. Jun 2014 12:43

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.
Gruß Klaus
Benutzeravatar
Klaus Schuster
UDF-Programmierer
UDF-Programmierer
 
Beiträge: 93
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: PLServer von NordicId verwenden

Beitragvon AUGE_OHR » Mi, 18. Jun 2014 13:15

Klaus Schuster hat geschrieben:Das Control stellt eine Fenster zur Verfügung.
man benötigt meistens ein "Fenster" an das man einen Event schicken kann.
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
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10065
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: PLServer von NordicId verwenden

Beitragvon Klaus Schuster » Fr, 20. Jun 2014 8:08

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.
Gruß Klaus
Benutzeravatar
Klaus Schuster
UDF-Programmierer
UDF-Programmierer
 
Beiträge: 93
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: PLServer von NordicId verwenden

Beitragvon AUGE_OHR » Fr, 20. Jun 2014 13:26

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/
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10065
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg

Re: PLServer von NordicId verwenden

Beitragvon Klaus Schuster » Do, 31. Jul 2014 10:06

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):

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

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

    // *********************************************************************//
    // 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;
Erstaunlich ist, dass es im PLServer noch weitere Methoden mit derselben Dispatch-Id 1 gibt.

Hast Du eine Idee?
Gruß Klaus
Benutzeravatar
Klaus Schuster
UDF-Programmierer
UDF-Programmierer
 
Beiträge: 93
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: PLServer von NordicId verwenden

Beitragvon Klaus Schuster » Do, 31. Jul 2014 10:11

Die Dateiendung .pas war nicht erlaubt. Nun als .txt.
Dateianhänge
PLSERVERLib_TLB_7.0.0.txt
(40.04 KiB) 69-mal heruntergeladen
Gruß Klaus
Benutzeravatar
Klaus Schuster
UDF-Programmierer
UDF-Programmierer
 
Beiträge: 93
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: PLServer von NordicId verwenden

Beitragvon brandelh » Do, 31. Jul 2014 10:30

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 ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13201
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: PLServer von NordicId verwenden

Beitragvon Klaus Schuster » Do, 31. Jul 2014 10:36

wie wahr, wie wahr. Beim nächsten Mal...
Gruß Klaus
Benutzeravatar
Klaus Schuster
UDF-Programmierer
UDF-Programmierer
 
Beiträge: 93
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: PLServer von NordicId verwenden

Beitragvon brandelh » Do, 31. Jul 2014 11:36

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.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13201
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: PLServer von NordicId verwenden

Beitragvon Klaus Schuster » Do, 31. Jul 2014 13:24

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?
Gruß Klaus
Benutzeravatar
Klaus Schuster
UDF-Programmierer
UDF-Programmierer
 
Beiträge: 93
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: PLServer von NordicId verwenden

Beitragvon brandelh » Do, 31. Jul 2014 13:49

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.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13201
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: PLServer von NordicId verwenden

Beitragvon Klaus Schuster » Do, 31. Jul 2014 13:57

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
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
Benutzeravatar
Klaus Schuster
UDF-Programmierer
UDF-Programmierer
 
Beiträge: 93
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: PLServer von NordicId verwenden

Beitragvon brandelh » Do, 31. Jul 2014 14:04

sorry :?:
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13201
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim

Re: PLServer von NordicId verwenden

Beitragvon Udo » Do, 21. Aug 2014 8:45

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
Udo
Rookie
Rookie
 
Beiträge: 11
Registriert: Do, 18. Okt 2007 14:37

Re: PLServer von NordicId verwenden

Beitragvon Klaus Schuster » Do, 21. Aug 2014 11:57

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
Gruß Klaus
Benutzeravatar
Klaus Schuster
UDF-Programmierer
UDF-Programmierer
 
Beiträge: 93
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth

Re: PLServer von NordicId verwenden

Beitragvon Udo » Fr, 22. Aug 2014 10:30

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



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



Udo
Rookie
Rookie
 
Beiträge: 11
Registriert: Do, 18. Okt 2007 14:37

Re: PLServer von NordicId verwenden

Beitragvon Klaus Schuster » Di, 26. Aug 2014 8:18

Hallo Udo,

Danke für Deine Arbeit. Sobald ich etwas Neues weiß, melde ich mich.
Gruß Klaus
Benutzeravatar
Klaus Schuster
UDF-Programmierer
UDF-Programmierer
 
Beiträge: 93
Registriert: Do, 24. Jan 2008 10:01
Wohnort: 90762 Fürth


Zurück zu ActiveX

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast