···1104110411051105## SDL_loadso.h
1106110611071107+Shared object handles are now `SDL_SharedObject *`, an opaque type, instead of `void *`. This is just for type-safety and there is no functional difference.
11081108+11071109SDL_LoadFunction() now returns `SDL_FunctionPointer` instead of `void *`, and should be cast to the appropriate function type. You can define SDL_FUNCTION_POINTER_IS_VOID_POINTER in your project to restore the previous behavior.
1108111011091111## SDL_log.h
+31-3
include/SDL3/SDL_loadso.h
···2626 *
2727 * System-dependent library loading routines.
2828 *
2929+ * Shared objects are code that is programmatically loadable at runtime.
3030+ * Windows calls these "DLLs", Linux calls them "shared libraries", etc.
3131+ *
3232+ * To use them, build such a library, then call SDL_LoadObject() on it.
3333+ * Once loaded, you can use SDL_LoadFunction() on that object to find the
3434+ * address of its exported symbols. When done with the object, call
3535+ * SDL_UnloadObject() to dispose of it.
3636+ *
2937 * Some things to keep in mind:
3038 *
3139 * - These functions only work on C function names. Other languages may have
···5361#endif
54625563/**
6464+ * An opaque datatype that represents a loaded shared object.
6565+ *
6666+ * \since This datatype is available since SDL 3.0.0.
6767+ *
6868+ * \sa SDL_LoadObject
6969+ * \sa SDL_LoadFunction
7070+ * \sa SDL_UnloadObject
7171+ */
7272+typedef struct SDL_SharedObject SDL_SharedObject;
7373+7474+/**
5675 * Dynamically load a shared object.
5776 *
5877 * \param sofile a system-dependent name of the object file.
5978 * \returns an opaque pointer to the object handle or NULL on failure; call
6079 * SDL_GetError() for more information.
6180 *
8181+ * \threadsafety It is safe to call this function from any thread.
8282+ *
6283 * \since This function is available since SDL 3.0.0.
6384 *
6485 * \sa SDL_LoadFunction
6586 * \sa SDL_UnloadObject
6687 */
6767-extern SDL_DECLSPEC void * SDLCALL SDL_LoadObject(const char *sofile);
8888+extern SDL_DECLSPEC SDL_SharedObject * SDLCALL SDL_LoadObject(const char *sofile);
68896990/**
7091 * Look up the address of the named function in a shared object.
···86107 * \returns a pointer to the function or NULL on failure; call SDL_GetError()
87108 * for more information.
88109 *
110110+ * \threadsafety It is safe to call this function from any thread.
111111+ *
89112 * \since This function is available since SDL 3.0.0.
90113 *
91114 * \sa SDL_LoadObject
92115 */
9393-extern SDL_DECLSPEC SDL_FunctionPointer SDLCALL SDL_LoadFunction(void *handle, const char *name);
116116+extern SDL_DECLSPEC SDL_FunctionPointer SDLCALL SDL_LoadFunction(SDL_SharedObject *handle, const char *name);
9411795118/**
96119 * Unload a shared object from memory.
120120+ *
121121+ * Note that any pointers from this object looked up through SDL_LoadFunction()
122122+ * will no longer be valid.
97123 *
98124 * \param handle a valid shared object handle returned by SDL_LoadObject().
99125 *
126126+ * \threadsafety It is safe to call this function from any thread.
127127+ *
100128 * \since This function is available since SDL 3.0.0.
101129 *
102130 * \sa SDL_LoadObject
103131 */
104104-extern SDL_DECLSPEC void SDLCALL SDL_UnloadObject(void *handle);
132132+extern SDL_DECLSPEC void SDLCALL SDL_UnloadObject(SDL_SharedObject *handle);
105133106134/* Ends C function definitions when using C++ */
107135#ifdef __cplusplus