firstly, you are getting a "wrong" type of the Symbol, it should be a pointer type instead of Symbol<u32>; also, you dont' need the "raw" value of the symbols: the symbol can be deref-ed to its underlying pointer. for example, to get a unsafe extern "C" fn():
// an function pointer type alias for readability
type FP = unsafe extern "C" fn ();
let fp = lib.get::<FP>(b"GetLastError\0").unwrap();
// `Symbol` deref to FP, and function pointers are `Copy`:
let fp: FP = *fp;
I'm not familiar with libffi, just be extra careful when using libloading, it's extremelyunsafe by its nature, and you are very likely to run into crashes some way or another.
for example, the Symbol type is a wrapper for the underlying pointer type, it ensures the library is not unloaded thanks to the lifetime. if you by pass the wrapper and use the pointer directly, you must make sure the Library object is not dropped when you call the function pointer.