Seite 2 von 4

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

Verfasst: 31.07.2010 13:41
von HeX0R
Interessanterweise verbindet sich auch die vorkompilierte TRIXI.exe im Demo\Delphi-Ordner nicht mit einem gestarteten Netzwerkserver.
Die Unicode-Variante allerdings schon.

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

Verfasst: 31.07.2010 15:36
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...

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

Verfasst: 31.07.2010 15:43
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.

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

Verfasst: 31.07.2010 20:53
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

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

Verfasst: 31.07.2010 21:27
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:

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

Verfasst: 31.07.2010 21:46
von Helmut
Hallo,
Compilerfehlermeldung für Zeile 10:

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

Gruß Helmut

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

Verfasst: 31.07.2010 21:50
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...

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

Verfasst: 31.07.2010 22:05
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...

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

Verfasst: 31.07.2010 23:54
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

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

Verfasst: 01.08.2010 00:27
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