Seite 1 von 1

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

Verfasst: 19.09.2006 16:51
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ß

Verfasst: 19.09.2006 17:01
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...

Verfasst: 19.09.2006 18:25
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.

Verfasst: 20.09.2006 00:07
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.