FreeBasic DLL passing parameters.

1. Passing string parameter   variant1

FreeBasic DLL side ====================================================

'$include: 'DllMain.bi'

Function
TestStringPass (byref ptrInString As byte ptr) as long export
    dim
StringParam as string
    dim
ptrOutString As byte ptr
    StringParam=*ptrInParam

    print
"StringParam=";StringParam

StringParam="dll+++++++++" 'new value of StringParam
ptrOutString=sadd(
StringParam)
ptrInString=ptrOutString ' set pointer to new string
print "dll ptrInString=" ;ptrInString
TestStringPass=len(StringParam)
end function

RapidQ side ====================================================

declare function TestStringPass lib "TestStringPass.dll" alias "TestStringPass@4" (byref ptrKeyList as long) as long

DIM Mem1 AS QMemoryStream
dim ptrbzz as long
ss$="Test string"
print "ss$=" ;ss$
ptrbzz=varptr(ss$) ' pointer to test string
z=TestStringPass (ptrbzz)
Mem1.MemCopyFrom (ptrbzz, z)
Mem1.position=0
ss$=Mem1.ReadStr(z)'new value of test string
print "3 ss$=" ;ss$

2. Passing string parameter   variant2 (for Version 0.13b  and later)

FreeBasic DLL side
====================================================

'$include: 'DllMain.bi'

Function
TestStringPass2 (byval InString As string) as long export

print "
dll InString=" ;InString
InString="dll+++++++++"
print "
dll 2 InString=" ;InString

END function

'RapidQ side ====================================================

declare function
TestStringPass lib "TestStringPass2.dll" alias "PASSSTRING@4" ( byref KeyList as string) as long

ss$="Test string"
print "
1 ss$=" ;ss$
call
TestStringPass (ss$)
print "
2 ss$=" ;ss$

application.terminate '
necessary trick !!!