PB DLL mit Rückgabe String in Office 64-Bit verwenden

Für allgemeine Fragen zur Programmierung mit PureBasic.
TC_O
Beiträge: 12
Registriert: 13.04.2020 14:48

PB DLL mit Rückgabe String in Office 64-Bit verwenden

Beitrag von TC_O »

Hallo Experten,

wie muss ich den Code in PB / Office modifizieren, so dass die Funktion auch unter 64-Bit Office einen String zurückgibt und nicht komplett abstürzt?

PB-Code:

Code: Alles auswählen

#MAX_TEXTLEN = 1024

Structure vbString
  len.l
  text.s{#MAX_TEXTLEN}
EndStructure

Code: Alles auswählen

; Stringübergabe von PureBasic nach VB/VBA
Procedure.i SetString(Var.s, nFormat=#PB_Ascii)
  Static result.vbString
  PokeS(@result\text, Var, -1, nFormat)
  result\len = Len(Var)
  ProcedureReturn @result\text
EndProcedure  

ProcedureDLL.i Test()
  Protected Result.s = ""
  ...
  Result = "Ein kleiner Test"

  ProcedureReturn SetString(Result)
EndProcedure
Code in VBA Access 64-Bit:

Code: Alles auswählen

Private Declare PtrSafe Function Test Lib "MyPB.dll" () As String
Unter Office/Access 32-Bit funktioniert der Code einwandrei.
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden

Beitrag von Nino »

Hast du die betr. DLL denn mit einer 64-Bit-Version von PureBasic erzeugt? :mrgreen:
TC_O
Beiträge: 12
Registriert: 13.04.2020 14:48

Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden

Beitrag von TC_O »

Ja, klar. Die DLL liegt als 64-Bit DLL vor - compiliert mit "Pure Basic 5.71 LTS (Windows - x64)".
Das Problem scheint diese Routine auf einem 64-Bit System zu sein.

Code: Alles auswählen

#MAX_TEXTLEN = 1024

Structure vbString
  len.l
  text.s{#MAX_TEXTLEN}
EndStructure

; Stringübergabe von PureBasic nach VB6
Procedure.i SetString(Var.s, nFormat=#PB_Ascii)
  Static result.vbString
  PokeS(@result\text, Var, -1, nFormat)
  result\len = Len(Var)
  ProcedureReturn @result\text
EndProcedure 
Ich benötige halt dringend einen String als Rückgabewert der PB-Funktion in der VBA 64-Bit Welt. Wie gesagt, als 32-Bit compiliert und in 32-Bit Office / VB6 eingebunden, funktioniert das ja alles prächtig.
Benutzeravatar
mk-soft
Beiträge: 3700
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden

Beitrag von mk-soft »

Kann es sein das es bei X64 Unicode sein muss. Bei VB6 war es noch ASCII
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
TC_O
Beiträge: 12
Registriert: 13.04.2020 14:48

Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden

Beitrag von TC_O »

Nein, daran sollte es nicht liegen.
Hatte es auch schon mit #PB_Unicode probiert.
Gleiches Problem - Absturz.
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden

Beitrag von Derren »

Nur geraten, aber probier mal:
mehr als wieder abstürzen kann ja wohl nicht passieren

Code: Alles auswählen

Structure vbString
  len.i ;anstatt len.l
  text.s{#MAX_TEXTLEN}
EndStructure
Signatur und so
TC_O
Beiträge: 12
Registriert: 13.04.2020 14:48

Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden

Beitrag von TC_O »

Funktioniert ebenso wenig und wäre auch falsch, da die Stringübergabe von VB6/VBA an die PB-DLL dann auch nicht mehr korrekt funktioniert.
Benutzeravatar
mk-soft
Beiträge: 3700
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden

Beitrag von mk-soft »

Nicht getestet.

Weiss aber nicht ob VBA den String schon selber frei gibt

Code: Alles auswählen

; Stringübergabe von PureBasic nach VBA
ProcedureDLL.i SetString(Var.s)
  Static r1
  If r1
    SysFreeString_(r1)
  EndIf
  r1 = SysAllocString_(Var)
  ProcedureReturn r1
EndProcedure
Quelle: https://renenyffenegger.ch/notes/develo ... char-array
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden

Beitrag von Derren »

Ich würd's gern testen und selber probieren, aber er findet die DLL schon nicht, weder mit relativem, noch mit absolutem Pfad. :roll:
Signatur und so
TC_O
Beiträge: 12
Registriert: 13.04.2020 14:48

Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden

Beitrag von TC_O »

Du musst die DLL mit dem 64-Bit Compiler von PB compilieren und dann die 64-Bit Version von Access/VBA starten.
Antworten