PB DLL mit String als Rückgabewert mit Visual Basic aufrufen

Für allgemeine Fragen zur Programmierung mit PureBasic.
pickelrobert
Beiträge: 207
Registriert: 09.12.2004 22:09

PB DLL mit String als Rückgabewert mit Visual Basic aufrufen

Beitrag von pickelrobert »

Hallo,

ich habe folgende DLL geschrieben

Code: Alles auswählen

Global Rueckgabe.s
  
  ProcedureDLL.s HoleStueck(strWert.s,strSeparator.s,lngWert.l)
     Rueckgabe = StringField(strWert,lngWert,strSeparator)
     ProcedureReturn Rueckgabe
  EndProcedure
in Visual Basic sieht die Deklaration so aus

Code: Alles auswählen

Private Declare Function HoleStueck Lib "MeineFunktionen" (ByVal strWert As String, ByVal strSeparator As String, lngIndex As Long) As String

Private Sub Command1_Click()
  Dim a$
  a = "hans hat hosen an"
  MsgBox HoleStueck(a, " ", 1)
End Sub
Dummerweise verabschiedet sich beim Aufruf die VB-IDE. Ist der Rückgabewert numerisch, funktioniert es.

Hat jemand eine Idee ?

Danke und Gruß
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

PB DLLs geben dein Pointer zu dem (globalen) STring zurück, der mit PeekS() ausgelesen werden muss, steht irgendwo in der Hilfe. Finds grad nemma wieder...
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
pickelrobert
Beiträge: 207
Registriert: 09.12.2004 22:09

Beitrag von pickelrobert »

Ich habe auch schon das englische Forum abgegrast. Leider führen die Ergebnisse dort nicht zum Erfolg. Die Einträge sind schon ziemlich alt (2003,2004). Im Moment benutze ich PB4 und ich bekomms einfach nicht hin. Die Variante mit "Rueckgabe=PeekS(*Rueckgabe) und in VB als Rückgabewert Long mit "lstrcpy" gibt einen Leerstring zurück. Die Doku zu diesem Thema ist meiner Meinung nach etwas dürftig.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Da VB mit normallen nullterminierten Strings nichts anfangen kann, nur diese eigenen shit-dinger, ist eine Umwandlung vonnöten. Ungetestet, aber vielleicht hilft es ja

Code: Alles auswählen

Procedure StringToBStr (string$) ; By Zapman Inspired by Fr34k
  Protected Unicode$ = Space(Len(String$)* 2 + 2)
  Protected bstr_string.l
  PokeS(@Unicode$, String$, -1, #PB_Unicode)
  bstr_string = SysAllocString_(@Unicode$)
  ProcedureReturn bstr_string
EndProcedure
Der Rückgabewert in der DLL ist jetzt aber long, sollte aber in VB ein BStr
ankommen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten