Seite 1 von 3
PB DLL mit Rückgabe String in Office 64-Bit verwenden
Verfasst: 13.04.2020 14:54
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.
Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden
Verfasst: 13.04.2020 19:10
von Nino
Hast du die betr. DLL denn mit einer 64-Bit-Version von PureBasic erzeugt?

Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden
Verfasst: 14.04.2020 07:50
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.
Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden
Verfasst: 14.04.2020 09:59
von mk-soft
Kann es sein das es bei X64 Unicode sein muss. Bei VB6 war es noch ASCII
Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden
Verfasst: 14.04.2020 10:58
von TC_O
Nein, daran sollte es nicht liegen.
Hatte es auch schon mit #PB_Unicode probiert.
Gleiches Problem - Absturz.
Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden
Verfasst: 14.04.2020 11:14
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
Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden
Verfasst: 14.04.2020 11:40
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.
Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden
Verfasst: 14.04.2020 11:44
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
Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden
Verfasst: 14.04.2020 12:19
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.

Re: PB DLL mit Rückgabe String in Office 64-Bit verwenden
Verfasst: 14.04.2020 12:27
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.