Seite 1 von 4

String als Parameter in einer DLL, will nicht,....LPCSTR.???

Verfasst: 30.07.2010 16:14
von Helmut
IPSymcon ist eine Visualierungs- und Steuerungssoftware für Haustechnik.

Nun kann man mit Hilfe einer DLL, auch mit eigener Software, dort allerlei anstellen.

Genaueres kann man hier nachlesen: http://www.ip-symcon.de/forum/f13/hobby ... #post91163

Ich habe ein Problem mit einem String, die einer DLL übergeben werden soll.
Hab' schon ziemlich viel rumprobiert.

Die DLL ist hier:http://www.ip-symcon.de/forum/attachmen ... -trixi.zip

Zum Probieren kann man statt 121.0.0.1 auch andere Adr und andere Ports nehmen

Der Entwickler der DLL schrieb:Frag in nem PureBasic Forum und erwähne, dass LPCSTR an die Stelle gehört
Die Debugausgabe bringt mir auch den String, in dem Übergabekommando funktioniert es nicht.
In der Dll-Beschreibung steht:
PAnsiChar ist ein Pointer auf ein Ansi CharArray (String)

Code: Alles auswählen

;Ort der LIB, "C:\Trixi\Trixi.dll")
;library öffnen
DLL_NAME.s="C:\Trixi\Trixi.dll"
iLib=OpenLibrary(#PB_Any,DLL_NAME)
Debug iLIB
;function Connect(Server: PAnsiChar; Port: Integer): Boolean; 
  Text$ = "121.0.0.1"
  *Text = @Text$            ; *Text speichert die Adresse des Strings im Speicher
  *Pointer.String = @*Text  ; *Pointer verweist auf *Text
  Debug *Pointer\s          ; Darstellen des Strings, welcher sich an der in *Pointer gespeicherten Adresse befindet
PortNr.i=3773
Debug *Pointer\s
RetVal_connect.l=CallFunction(iLIB,"Connect",*Pointer\s,PortNr)
Debug *Pointer\s
Debug RetVal_connect

;function WriteString(Variable: Integer; Value: PAnsiChar):
VariablenNr.i=55783
ValueStr.s="Purebasic"

RetVal_Write_Str.l=CallFunction(iLIB,"WriteString", @VariablenNr, @ValueStr)

Debug RetVal_Write_Str

;function WriteInteger(Variable: Integer; Value: Integer): Integer; stdcall external 'TRIXI.DLL';
VariablenNr.i=58507
Value_Int.i=0
RetVal_Write_Int=CallFunction(iLIB,"WriteInteger",@VariablenNr,@Value_Int)

Debug RetVal_Write_Int

 If RetVal_connect>0;
    Debug "Ich bin online"   ;showmessage('Connect Okay.')
  Else
    Debug " Leider nix"      ;showmessage('Hat leider nicht geklappt...');
EndIf;

Re: Sting als Parameter in einer DLL, will nicht,....LPCSTR.

Verfasst: 30.07.2010 17:36
von HeX0R
Die DLL ist leider nicht verfügbar.

Eigentlich sollte es aber so in der Art funktionieren (ungetestet):

Code: Alles auswählen

;Ort der LIB, "C:\Trixi\Trixi.dll")
;library öffnen
DLL_NAME.s = "C:\Trixi\Trixi.dll"

Prototype PT_Connect(Server.p-ascii, Port)

iLib = OpenLibrary(#PB_Any, DLL_NAME)
If iLib
	;function Connect(Server: PAnsiChar; Port: Integer): Boolean;
	Text$              = "127.0.0.1"
	PortNr             = 3773
	Connect.PT_Connect = GetFunction(iLIB, "Connect")
	If Connect
		RetVal_connect     = Connect(Text$, Port)
		Debug RetVal_connect
	EndIf
	CloseLibrary(iLib)
EndIf
Ascii ist zwar nicht ANSI, aber bei IPs gibts ja auch keine Sonderzeichen, also sollte es egal sein.
Und es sollte auch funktionieren, wenn du es im Unicode-Mode kompilierst.

(War das 121.0.0.1 eigentlich ein Tippfehler?)

Re: Sting als Parameter in einer DLL, will nicht,....LPCSTR.

Verfasst: 30.07.2010 17:49
von Bisonte
Also der Link zur DLL führt ins Nirwana.
Da ich die Dll nicht habe (und wahrscheinlich auch nicht wofür die gut ist...), versuch mal folgenden Code...

Code: Alles auswählen

;function Connect(Server: PAnsiChar; Port: Integer): Boolean;
Prototype.l ProtoConnect(Server.p-ascii, Port.i)

iLib=OpenLibrary(#PB_Any,"C:\Trixi\Trixi.dll")

If iLib

  Trixi_Connect.ProtoConnect = GetFunction(iLIB,"Connect")
  
  Text.s = "127.0.0.1" : Port.i = 3773

  RetVal = Trixi_Connect(Text, Port)
  If RetVal
    Debug "Verbunden"
  Else
    Debug "Nicht Verbunden"
  EndIf
  
  CloseLibrary(iLib)
  
EndIf
Ich habe mal versucht das mit ProtoType zu machen, und ich nehme an, dass Text.s = "127.0.0.1" sein soll und nicht 121.

Edit: Uh zu langsam ;)

Re: Sting als Parameter in einer DLL, will nicht,....LPCSTR.

Verfasst: 30.07.2010 18:45
von Kiffi
Bisonte hat geschrieben:Also der Link zur DLL führt ins Nirwana.
http://www.ip-symcon.de/forum/f13/hobby ... #post90863

Grüße ... Kiffi

Re: Sting als Parameter in einer DLL, will nicht,....LPCSTR.

Verfasst: 30.07.2010 21:35
von Helmut
Sorry, der Verfasser hat die Tread`s verschoben, versucht ihr das nochmal?
Sonst lade ich die DLL nochmal auf meine Seite.

@Codeschreiber
Leider NEIN...

http://www.ip-symcon.de/forum/attachmen ... -trixi.zip


Bei C soll es auch nach komischen Kriterien funktioniere: Guuuckkst duhttp://www.ip-symcon.de/forum/f13/hobby ... #post91187

Re: String als Parameter in einer DLL, will nicht,....LPCSTR

Verfasst: 30.07.2010 22:26
von HeX0R
Was bringt dich überhaupt auf die Idee, dass das am übergebenem String liegt?

Bei jedem von uns wird die Funktion dieser DLL mit Sicherheit auch 0 zurückgeben,
weil wir nichts haben, wozu sie sich verbinden könnte.

Bist du überhaupt sicher, dass da irgendwas am anderen Ende empfängt?
Kannst du dich denn per OpenNetworkConnection an deine IP+Port überhaupt andocken?

Re: String als Parameter in einer DLL, will nicht,....LPCSTR

Verfasst: 30.07.2010 23:09
von Helmut

Code: Alles auswählen

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

Port = 3773  ;war im Beispiel 6832

ConnectionID = OpenNetworkConnection("127.0.0.1", Port)
If ConnectionID
  MessageRequester("PureBasic - Client", "Client connected to server...", 0)
  
  SendNetworkString(ConnectionID, "An hello from a client !!! :-)")
    
  MessageRequester("PureBasic - Client", "A string has been sent to the server, please check it before quit...", 0)
  
  CloseNetworkConnection(ConnectionID)
Else
  MessageRequester("PureBasic - Client", "Can't find the server (Is it launched ?).", 0)
EndIf
 
End   

Wenn mein IPSymcon gestartet ist, dann "connectet" er mit diesem Purebasic-Client-Code.
Leider nicht über diese DLL-Anbindung......

Zum Testen könnten Nicht-Besitzer dieses Supertruppa Haustechnikserver den Servercode auf der HELP_Seite auf diesen Port legen.

Gruß Helmut

PS: ServerCode angepasst, aus Hilfe:

Code: Alles auswählen

;
; ------------------------------------------------------------
;
;   PureBasic - Network (Server) example file
;
;    (c) 2003 - Fantaisie Software
;
; ------------------------------------------------------------
;

If InitNetwork() = 0
  MessageRequester("Error", "Can't initialize the network !", 0)
  End
EndIf

Port = 3773; war 6832
*Buffer = AllocateMemory(1000)

If CreateNetworkServer(0, Port)

  MessageRequester("PureBasic - Server", "Server created (Port "+Str(Port)+").", 0)
  
  Repeat
      
    SEvent = NetworkServerEvent()
  
    If SEvent
    
      ClientID = EventClient()
  
      Select SEvent
      
        Case #PB_NetworkEvent_Connect
          MessageRequester("PureBasic - Server", "A new client has connected !", 0)
  
        Case #PB_NetworkEvent_Data
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a packet !", 0)
          ReceiveNetworkData(ClientID, *Buffer, 1000)
          MessageRequester("Info", "String: "+PeekS(*Buffer), 0)
  
        Case #PB_NetworkEvent_File
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has send a file via the network !", 0)
          ReceiveNetworkFile(ClientID, "C:\TEST_Network.ftp3")
  
        Case #PB_NetworkEvent_Disconnect
          MessageRequester("PureBasic - Server", "Client "+Str(ClientID)+" has closed the connection...", 0)
          Quit = 1
    
      EndSelect
    EndIf
    
  Until Quit = 1 
  
  MessageRequester("PureBasic - Server", "Click to quit the server.", 0)
  
  CloseNetworkServer(0)
Else
  MessageRequester("Error", "Can't create the server (port in use ?).", 0)
EndIf

  
End   



Re: String als Parameter in einer DLL, will nicht,....LPCSTR

Verfasst: 30.07.2010 23:30
von HeX0R
Naja, schade, hätte mich jetzt auch interessiert,
aber nach fünfzehn Minuten planlosem Rumsuchen, habe ich immernoch keine Help-Seite bei denen gefunden und
daher auch keinen Server zum testen.

Vielleicht habe ich auch einfach noch nicht genug Bier heute getrunken...
Wird sich schon noch eine andere helfende Hand finden.

Re: String als Parameter in einer DLL, will nicht,....LPCSTR

Verfasst: 30.07.2010 23:35
von Helmut
Habe den Help-Seiten_Code oben reineditiert.

Nimm noch 'nen Schluck und probiere den aus der Post von mir.

Gruß Helmut

Re: String als Parameter in einer DLL, will nicht,....LPCSTR

Verfasst: 30.07.2010 23:43
von HeX0R
Aaaah, du meintest in der PB-Help ... oh Gott, ich hab definitiv zu wenig Bier!