DLL Nachbauen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Beitrag von helpy »

mcGeorge hat geschrieben:int G1501_ReadCardString(LPSTR HADName, LPSTR HADNumber, LPSTR VKNR, LPSTR AssurancyNumber, LPSTR AssurancyStatus, LPSTR StatusSuppl, LPSTR Title, LPSTR Forname, LPSTR NameSuppl, LPSTR Surname, LPSTR DateOfBith, LPSTR Street, LPSTR CountryCode, LPSTR PostalCode, LPSTR City, LPSTR ExpiryDate, LPSTR Checksum);
Hattest Du es schon so versucht:

Code: Alles auswählen

ProcedureDLL G1501_ReadCardString(HADName, HADNumber, ..., CheckSum)
  PokeS( HADName, "Name" )
  PokeS( HADNumber, "Nummer" )
  ;...
  PokeS( CheckSum, "03AF45C8" )
  ProcedureReturn 99 ; oder etwas anderes
EndProcedure
Da an die Funktion Pointer auf Strings (= LONG-Wert) übergeben werden, reicht es, wenn auch LONG-Variablen verwendet werden. Mit PokeS(PointerAufString, "String") kannst Du dann den String beschreiben.

WICHTIG: An der angegebenen Adresse muss genügend Speicher zur Verfügung stehen. D.h. vor dem Aufruf der DLL-Funktion müssen Strings (bzw. Puffer) mit der entsprechenden Größe erzeugt werden (aber das sollte ja in dem bereits vorhanden Programm ja schon richtig gemacht werden). In VB6 (wie Du oben beschrieben hast) wird zwar der String ByVal übergeben, was aber in Ordnung ist (siehe mein Posting oben).

cu, helpy
mcGeorge
Beiträge: 10
Registriert: 20.09.2004 16:28

Beitrag von mcGeorge »

Erstmal :( an "helpy" ich hätte besser lesen sollen, anstatt zu schreiben, das du mich nicht verstanden hast.

:mrgreen: Ich habe die Lösung gefunden, dank deines Hinweises!

Das folgende Beispiel funktioniert:

:: PureBasic.Dll ::
ProcedureDLL.l TestFunk( Inhalt.l )
Protected ReturnString.s
ReturnString = "Hier ist PureBasic"
CopyMemory(@ReturnString, Inhalt, Len(ReturnString))
ProcedureReturn 22
EndProcedure

:: VB6 ::
Declare Function TestFunk Lib "purebasic.dll" (ByVal sText As String) As Long

Sub Main()
Dim sInhalt As String
Dim lReturn As Long
sInhalt = Space(30)
lReturn = 0
lReturn = TestFunk(sInhalt)
MsgBox sInhalt
End Sub

Der in VB6 mit Leerzeichen initialisierte String "sInhalt" wird von der PureBasic-Dll mit dem Worten "Hier ist PureBasic" gefüllt und steht in VB6 wieder zur verfügung.

Wichtig ist natürlich, das der reservierte String-Speicher in VB6 groß genug ist.


So der Test hat geklappt, nun werde ich testen, ob das auch mit der richtigen Applikation klappt.

mfg
gg
mcGeorge
Beiträge: 10
Registriert: 20.09.2004 16:28

Beitrag von mcGeorge »

Alles Sahne, super u.s.w.

Es klappt!!! :allright: :bounce: :bounce:
Benutzeravatar
brotkasten-deluxe
Beiträge: 147
Registriert: 29.08.2004 01:43
Wohnort: Germany
Kontaktdaten:

Beitrag von brotkasten-deluxe »

Tool dieses Thema :allright: Er riecht gewaltig nachner neuen Lib ..... :wink:
KingKong
Beiträge: 10
Registriert: 18.09.2004 17:32

Beitrag von KingKong »

bei mir hat es folgendermaßen funktioniert:

im aufrufenden Programm genügend große Leerstrings erzeugen !
im Aufruf die Adressen des Speicherorts für die Variableninhalte übergeben !

das PureBasic-Dll mit nachfolgendem Code:

ProcedureDLL.l ReadString( *sText1, *sText2 )
PokeS(*sText1,"es klappt !!")
PokeS(*sText2,"klappt auch!!")
ProcedureReturn 99
EndProcedure
Antworten