System-dependent library loading routines.
More...
|
|
using | SDL::SharedObjectRaw = SDL_SharedObject * |
| | Alias to raw representation for SharedObject.
|
| |
Shared objects are code that is programmatically loadable at runtime. Windows calls these "DLLs", Linux calls them "shared libraries", etc.
To use them, build such a library, then call SharedObject.SharedObject() on it. Once loaded, you can use SharedObject.LoadFunction() on that object to find the address of its exported symbols. When done with the object, call SharedObject.Unload() to dispose of it.
Some things to keep in mind:
- These functions only work on C function names. Other languages may have name mangling and intrinsic language support that varies from compiler to compiler.
- Make sure you declare your function pointers with the same calling convention as the actual library function. Your code will crash mysteriously if you do not do this.
- Avoid namespace collisions. If you load a symbol from the library, it is not defined whether or not it goes into the global symbol namespace for the application. If it does and it conflicts with symbols in your code or other shared libraries, you will not get the results you expect. :)
- Once a library is unloaded, all pointers into it obtained through SharedObject.LoadFunction() become invalid, even if the library is later reloaded. Don't unload a library if you plan to use these pointers in the future. Notably: beware of giving one of these pointers to atexit(), since it may call that pointer after the library unloads.
◆ LoadFunction() [1/2]
This function pointer is no longer valid after calling SharedObject.Unload().
This function can only look up C function names. Other languages may have name mangling and intrinsic language support that varies from compiler to compiler.
Make sure you declare your function pointers with the same calling convention as the actual library function. Your code will crash mysteriously if you do not do this.
If the requested function doesn't exist, nullptr is returned.
- Parameters
-
- Returns
- a pointer to the function or nullptr on failure; call GetError() for more information.
- Thread safety:
- It is safe to call this function from any thread.
- Since
- This function is available since SDL 3.2.0.
- See also
- SharedObject.SharedObject
◆ LoadFunction() [2/2]
This function pointer is no longer valid after calling SharedObject.Unload().
This function can only look up C function names. Other languages may have name mangling and intrinsic language support that varies from compiler to compiler.
Make sure you declare your function pointers with the same calling convention as the actual library function. Your code will crash mysteriously if you do not do this.
If the requested function doesn't exist, nullptr is returned.
- Parameters
-
| name | the name of the function to look up. |
- Returns
- a pointer to the function or nullptr on failure; call GetError() for more information.
- Thread safety:
- It is safe to call this function from any thread.
- Since
- This function is available since SDL 3.2.0.
- See also
- SharedObject.SharedObject
◆ LoadObject()
- Parameters
-
| sofile | a system-dependent name of the object file. |
- Returns
- an opaque pointer to the object handle or nullptr on failure; call GetError() for more information.
- Thread safety:
- It is safe to call this function from any thread.
- Since
- This function is available since SDL 3.2.0.
- See also
- SharedObject.LoadFunction
-
SharedObject.Unload
◆ Unload()
| void SDL::SharedObject::Unload |
( |
| ) |
|
|
inline |
◆ UnloadObject()