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

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

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

Beitrag von HeX0R »

Interessanterweise verbindet sich auch die vorkompilierte TRIXI.exe im Demo\Delphi-Ordner nicht mit einem gestarteten Netzwerkserver.
Die Unicode-Variante allerdings schon.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

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

Beitrag von edel »

Bei mir verbinden sich fast alle Programme mit dem Server, nur die Prismaversion nicht.

Ich hab es jetzt mit C,C++ und PB probiert, da passiert nix...
Benutzeravatar
dysti
Beiträge: 656
Registriert: 10.02.2006 18:34
Wohnort: Schlicktown

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

Beitrag von dysti »

Hallo Helmut,
habe mir alle Mühe gemacht, aber die Verbindung zum Webserver klappt zwar, aber ein String wird aber auch mit den Demoprogrammen nicht ausgegeben. Habe mir sogar den Lazarus runtergeladen, auch kein Treffer.
Lade dir mal diesen Webserver herunter
http://www.purebasic-lounge.com/viewtop ... nwebserver
und berichte über deine Ergebnisse.
Vorteil: Der Webserver läßt sich im laufenden Betrieb starten und stoppen und sogar der Port eingeben.
Für diese Zwecke genau richtig, finde ich.
Probiere auch die Demos aus.
Den Erfolg wie @edel hatte ich nicht.
Bin über dein Bericht gespannt.
PB5 / Spiderbasic / WB14 / Win7 / Win8.1 / Win10 / Debian 9
Benutzeravatar
Helmut
Beiträge: 162
Registriert: 20.09.2004 22:53

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

Beitrag von Helmut »

Vielen Dank für eure Testerei !!!

@Dysti
Es soll kein Ckient oder Server mit Purebasic-Befehlen aufgebaut werden, sondern ich möchte mit Hilfe einer DLL und Purebasic auf ein Server zugreifen.

Der Befehl der DLL um sich mit dem Server zu verbinden verlangt einen String mit der ADR des Servers.

Syntax: function Connect(Server: PAnsiChar; Port: Integer): Boolean;

Und da liegt das Problem: Dieser PAnsiChar ........ wird nicht als ADR von der DLL (über Purebasic) genommen.

Ob da nun 127.0.0.1 oder localhost steht, über Purebasic und der DLL geht es nicht........

Da nun nicht jeder dieses Serverprogramm hat, habe ich das PB-Hilfe-Server-Beispiel mit Port 3773 angehängt.

Damit könnte, wer mir helfen mag, den Zugriff auf den Server über diese DLL versuchen.

zB. mit diesem Codebeispiel:

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$ = "127.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=3774
Debug *Pointer\s
;RetVal_connect.l=CallFunction(iLIB,"Connect",*Pointer\s,PortNr)
Debug *Pointer\s
Debug RetVal_connect
Gibt es irgendwelche Textformatierungen die man machen kann?

AnsiChar, Pchar oder wie auch immer das heißen kann?

Die Demoprogramme, aus Trixi, habe ich mit folgendem Ergebniss ausprobiert:

VB geht nicht Fehlermeldung
Net Prism geht
Delphi geht
Delphi Unicode geht

Vielen Dank für eure Versuche, Gruß Helmut
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

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

Beitrag von mk-soft »

Ein Text Parameter kann als ByVal übergeben werden, wobei dieser immer als Pointer auf den Text übergeben wird. Wenn der Text-Parameter als ByRef übergeben wird, muss der pointer von den Text-Pointer übergeben werden.
Sieht so aus das Adr als ByRef übergeben werden muss

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$ = "127.0.0.1"
  *Text = @Text$            ; *Text speichert die Adresse des Strings im Speicher
PortNr.i=3774
Debug *Pointer\s
;RetVal_connect.l=CallFunction(iLIB,"Connect",@*Text,PortNr)
Debug *Pointer\s
Debug RetVal_connect
Schau mal ob es so geht.

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Helmut
Beiträge: 162
Registriert: 20.09.2004 22:53

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

Beitrag von Helmut »

Hallo,
Compilerfehlermeldung für Zeile 10:

Die folgende Variable hat eine 'Structur':*Pointer
Debug *Pointer\s

Gruß Helmut
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

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

Beitrag von mk-soft »

Also... die Zeile 10 wirst du doch wohl selber raus schmeissen können!!!

Kleiner link zu PAnsiChar
http://www.fh-jena.de/contrib/fb/gw/gmu ... _pchr.html

...

Also nach der Beschreibung muss nur "*Text" übergeben werden...

P.S. Prüft mal mit "GetFunction()" ob die Funktion überhaupt gibt. Manchmal sind die Funktionsnamen nicht so wie man denkt...
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Helmut
Beiträge: 162
Registriert: 20.09.2004 22:53

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

Beitrag von Helmut »

Meine PortNr ist 3773:

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$ = "127.0.0.1"
  *Text = @Text$            ; *Text speichert die Adresse des Strings im Speicher
PortNr.i=3773
;Debug *Pointer\s
RetVal_connect.l=CallFunction(iLIB,"Connect",@*Text,PortNr)
;Debug *Pointer\s
Debug RetVal_connect
;Ergebnis.l = GetFunction(#Library, FunktionsName$)

FunktionDa=GetFunction(iLIB,"Connect")
If FunktionDa
  Debug FunktionDa
Else
  Debug "Rückgabe=0"
EndIf
DEBUGAUSGABE:
21040296
0
48890672

Schade, geht auch nicht...
Benutzeravatar
Helle
Beiträge: 566
Registriert: 11.11.2004 16:13
Wohnort: Magdeburg

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

Beitrag von Helle »

In

Code: Alles auswählen

RetVal_connect.l=CallFunction(iLIB,"Connect",@*Text,PortNr)
würde ich mir Gedanken über das "@" machen. *Text ist doch schon der Pointer (Adresse) auf den String; @*Text zeigt auf die Adresse der Adresse.
Gruß
Helle
Benutzeravatar
Helmut
Beiträge: 162
Registriert: 20.09.2004 22:53

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

Beitrag von Helmut »

Ja,
hab' das auch schon nur mit der Adresse gemacht. Ich hab' da schon so viel probiert: Zeiger auf Adresse mit Inhalt usw...

Wie schon geschrieben, mit einem Purebasic-Client-Code geht die Textvariable auch.....

Nur die DLL will es nicht, kann die Aussage: Null.terminierten String was damit zu tun haben, wie ist das gemeint?

Gruß Helmut
Antworten