DLL Erzeugen / COM Schnittstelle erstellen

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

notloesung
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 194
Registriert: Fr, 24. Feb 2006 8:09
Kontaktdaten:

Beitrag von notloesung »

Guten Morgen Ihr,

... bin nach einer kurzen Pause wieder am Thema dran ...
Günter Beyes hat geschrieben:Ausserdem müsste man mal schauen, ob VBScript Funktionen hat, die chr(), Bin2U() und U2Bin() entsprechen. Wenn nein, müsste Phils Übertragungsformat entsprechend geändert werden, dass es passt.
Hallo Günter,

die Funktionen Bin2U() / U2Bin() scheinen hierbei der Knackpunkt zu sein.

Ich habe es bisher hinbekommen ein VBScript zu basteln welches das Xbase-Programm NPServer.exe aufruft.
Der Aufruf klappt - das Erzeugen der Pipelines im VBScript auch.
Die NPServer.exe akzeptiert die Pipes und meldet "verbunden".

Bis hierher komme ich - weiter leider nicht.
Die Funktionen Bin2U() und U2Bin() habe ich im VBScript nachgebildet (mit Hilfe des Internets).
Die Übergabe von Werten über die Pipeline (VBS nach Xbase) klappt "noch" :wink: nicht.
Es scheint so, als würde es an den o.g. Funktionen liegen. Leider habe ich bis dato noch keine Ahnung wo ich was ändern sollte. (Übertragungsprotokoll :?: )

Hier mal das Script:

Code: Alles auswählen

' VB Script Document

Public Function Dez2Bin(Wert)

  Dim BinWert, i, Summe, BinLaenge, DezWert, ZWSumme

  BinWert = 0
  DezWert = Wert
  i = 0

  If Wert <> 0 Then
  
    Do While DezWert >= BinWert
      BinWert = 1*2^BinLaenge
      BinLaenge = BinLaenge + 1
    Loop

    BinLaenge = BinLaenge -2
  
    Summe = "1"
    DezWert = DezWert - (1 * 2^BinLaenge)
    BinLaenge = BinLaenge -1

    For i = BinLaenge To 0 Step -1
      If DezWert >= (1 * 2^i) Then
        Summe = Summe & "1"
        DezWert = DezWert - (1 * 2^i)
      Else
        Summe = Summe & "0"
      End if
    Next

    If Wert < 0 Then
      ZWSumme = Summe
      For i = len(ZWSumme) to 1
        If mid(ZWSumme,i,1) = 1 Then
          Summe = Summe & "0"
        Else
          Summe = Summe & "1"
        End if
      Next
    End If

    'msgbox("Summe: " & Summe)
    Dez2Bin = Summe
  
  Else
    Dez2Bin = 0
  End if

End Function

'*******************************************************************************

Public Function Bin2Dez(Wert)

  Dim Laenge, i, Summe
  Laenge = len(Wert)-1
  Summe = 0
  If left(Wert,1) = "0" Then
    
  else
    For i = 0 to Laenge
      Summe = Summe + mid(Wert,i+1,1)*(2^(Laenge-i))
    Next
  End if
  Bin2Dez = Summe

End Function

Function CallServer( string, outpipe, inpipe )

	Dim rc
	Dim nLen
	
	If IsNull(outpipe) = False Then
	   string = Chr(1) & Dez2Bin(Len(string)) & string  	
     string = Dez2Bin(Len(String)) & string    	
     outpipe.Write( String )				
	Else
		Msgbox( "Function CallServer: " & "outpipe is null" )			
	End If
	
'	If IsNull(inpipe) = False Then
'	    Wscript.Sleep(100) 	    

'   		rc = inpipe.Read( 4 )
'   		rc = inpipe.Read( 1 )
'   		rc = inpipe.Read( 4 )
'   		nLen = Bin2Dez( rc )
'   		rc = inpipe.Read( nLen )		
   		
'   		' Rückgabewert
'   		CallServer = rc		
'	Else
'		Msgbox( "Function CallServer: " & "inpipe is null" )		
'	End If 
		
End Function

'******************************************************************************* 

Sub Start 

	Dim process
	Dim fso
	Dim out 
	Dim pin
	Dim rc
	Dim cCall
	
	' Pipe-Server definieren
	Set process = CreateObject("Wscript.Shell")
	' Server starten
	process.Run "C:\xyz\xyz\NPServer.exe"

	' Initialisierung des Servers abwarten
	Wscript.Sleep(1000)
	
	'Define object for PIPES
	Set fso = CreateObject("Scripting.FileSystemObject")

	'Setup access to named pipes
  Wscript.Sleep(500)	
	Set out = fso.CreateTextFile("\\.\pipe\out", 0)
	Wscript.Sleep(500)
	Set pin = fso.OpenTextFile("\\.\pipe\in", 1)

	' Parameter übergeben ... 	
	   cCall = "4700+11"
	   rc = CallServer( cCall, out, pin )

     Wscript.Sleep(1000)	
	   cCall = "CLOSE_PIPE"
	   rc = CallServer( cCall, out, pin )	
	
	'msgbox("VOR ENDE")	
	
	'Close handles to the PIPES
	out.Close
	pin.Close
	
	msgbox("ENDE")
	
End Sub	

Start
Bin für alle Tipps dankbar!

Gruß,
Notloesung
notloesung
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 194
Registriert: Fr, 24. Feb 2006 8:09
Kontaktdaten:

Beitrag von notloesung »

notloesung hat geschrieben:Es scheint so, als würde es an den o.g. Funktionen liegen. Leider habe ich bis dato noch keine Ahnung wo ich was ändern sollte. (Übertragungsprotokoll :?: )
Natürlich liegt das an dem Übertragungsprotokoll :!:.
Für meine Zwecke wird es (sehr) vereinfacht.

... bin dran, erste Test laufen und sind erfolgreich - auch wenn es sich noch um eine Baustelle handelt ...

Ergebnisse folgen, sobald diese vorzeigbar sind :)

Gruß,
Notloesung
Antworten