Calling a function returning a string (in dll)

BlitzMax Forums/BlitzMax Programming/Calling a function returning a string (in dll)

RepeatUntil(Posted 2005) [#1]
I would like to call a function inside a dll, this function returning a string. Here is how I am doing this in a short example:
Const DllName:String = "mydll.dll"
Local DllHandle = LoadLibraryA(DllName)

If DLLhandle = 0 Then
    Notify "Unable to initialize the dll"
    End
EndIf

Global GetString()"Win32" = GetProcAddress(DllHandle,"GetString")

Print GetString()


The problem is that GetString() is returning a number (for ex. 84843344). I tried a lot of combination (adding a $, $z, etc) to try to get a string from my function, but I always failed...

How can I do that???


Difference(Posted 2005) [#2]
Try
Global GetString:Byte Ptr()"Win32" =GetProcAddress(DllHandle,"GetString")

Print String.FromCString(GetString())




RepeatUntil(Posted 2005) [#3]
Fantastic! This works!!

The only drawback is that the GetString() function is not any more user-friendly ("Print String.FromCString(GetString())" instead of "GetString()"). I have to redefine a function GetString2() which return String.FromCString(GetString()). That's a bit a pity!!

Anyway, thank you very much for this!!!!


Suco-X(Posted 2005) [#4]
Hi
Test this

Global GetString$z()"Win32" =GetProcAddress(DllHandle,"GetString")

Print GetString()

Mfg Suco


RepeatUntil(Posted 2005) [#5]
Thanks! That's exactly what I was looking for! Suco-X, your solution is working perfectly!! And no need to redefine the GetString() function!!
Many thanks!


JoshK(Posted 2006) [#6]
If the dll is written in BlitzMax, what would the function in the dll source look like?:
Function GetString$()
GCEnter()
Return "This is a string!"
EndFunction


-- EDIT ---

Answered my own question:
Function PluginExtension:Byte Ptr()
	GCEnter()
	Local extension$
	Local HExtension:Byte Ptr
	extension="smf"
	HExtension=extension.ToCString()
	Return HExtension
EndFunction