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

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Helmut
Beiträge: 162
Registriert: 20.09.2004 22:53

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

Beitrag 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;
Zuletzt geändert von Helmut am 30.07.2010 21:45, insgesamt 2-mal geändert.
Benutzeravatar
HeX0R
Beiträge: 2959
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

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

Beitrag 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?)
Zuletzt geändert von HeX0R am 30.07.2010 17:38, insgesamt 1-mal geändert.
Benutzeravatar
Bisonte
Beiträge: 2430
Registriert: 01.04.2007 20:18

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

Beitrag 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 ;)
PureBasic 6.10 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

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

Beitrag 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
Hygge
Benutzeravatar
Helmut
Beiträge: 162
Registriert: 20.09.2004 22:53

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

Beitrag 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
Benutzeravatar
HeX0R
Beiträge: 2959
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

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

Beitrag 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?
Benutzeravatar
Helmut
Beiträge: 162
Registriert: 20.09.2004 22:53

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

Beitrag 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   


Zuletzt geändert von Helmut am 30.07.2010 23:32, insgesamt 1-mal geändert.
Benutzeravatar
HeX0R
Beiträge: 2959
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

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

Beitrag 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.
Benutzeravatar
Helmut
Beiträge: 162
Registriert: 20.09.2004 22:53

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

Beitrag von Helmut »

Habe den Help-Seiten_Code oben reineditiert.

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

Gruß Helmut
Benutzeravatar
HeX0R
Beiträge: 2959
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

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

Beitrag von HeX0R »

Aaaah, du meintest in der PB-Help ... oh Gott, ich hab definitiv zu wenig Bier!
Antworten