The example below works for me. As far as I can see, you can't use a 'pretty' name (eg. FormatMessage instead of FormatMessageA), but have to use the actual function name, unlike the second example below (Mark?)...
(This version gets the function address from "...\BlitzMax\lib\libkernel32.a".)
Const FORMAT_MESSAGE_ALLOCATE_BUFFER = 256
Const FORMAT_MESSAGE_IGNORE_INSERTS = 512
Const FORMAT_MESSAGE_FROM_STRING = 1024
Const FORMAT_MESSAGE_FROM_HMODULE = 2048
Const FORMAT_MESSAGE_FROM_SYSTEM = 4096
Const FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192
Extern "win32"
Function FormatMessageA (flags, source:Byte Ptr, messageid, languageid, buff:Byte Ptr, buffsize, args [])
End Extern
' -----------------------------------------------
' Example...
' -----------------------------------------------
error = 2 ' "File not found" error code...
Local message:Byte [255]
FormatMessageA (FORMAT_MESSAGE_FROM_SYSTEM, Null, error, 0, message, 255, Null)
Print ""
Print "Error message: " + String.FromCString (message)
Alternative version, accessing DLL directly...
Const FORMAT_MESSAGE_ALLOCATE_BUFFER = 256
Const FORMAT_MESSAGE_IGNORE_INSERTS = 512
Const FORMAT_MESSAGE_FROM_STRING = 1024
Const FORMAT_MESSAGE_FROM_HMODULE = 2048
Const FORMAT_MESSAGE_FROM_SYSTEM = 4096
Const FORMAT_MESSAGE_ARGUMENT_ARRAY = 8192
Global FormatMessage (flags, source:Byte Ptr, messageid, languageid, buff:Byte Ptr, buffsize, args []) "win32"
lib = LoadLibraryA ("kernel32.dll")
If lib
FormatMessage = GetProcAddress (lib, "FormatMessageA")
Else
Print "Dead"; End
EndIf
' -----------------------------------------------
' Example...
' -----------------------------------------------
error = 2 ' "File not found" error code...
Local message:Byte [255]
FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, Null, error, 0, message, 255, Null)
Print ""
Print "Error message: " + String.FromCString (message)
This little routine can be pretty handy if you're writing Win32 API stuff and a function fails for no discernible reason (use Win32\kernel32's GetLastError function for the error code)...
The API Guide Mr C refers to is probably this one:
http://www.mentalis.org/agnet/apiguide.shtml