- const struct dll_sym *sym;
- void *addr;
-
- if (!spec->handle)
- spec->handle = LoadLibrary(spec->name);
- if (!spec->handle) {
- for_each_sym(sym, spec) {
- if (sym->required) {
- ERROR("%ls could not be loaded!", spec->name);
- return WIMLIB_ERR_UNSUPPORTED;
- }
- }
- return 0;
- }
- for_each_sym(sym, spec) {
- addr = (void *)GetProcAddress(spec->handle, sym->name);
- if (addr) {
- *(sym->func_ptr) = addr;
- } else if (sym->required) {
- ERROR("Can't find %s in %ls", sym->name, spec->name);
- return WIMLIB_ERR_UNSUPPORTED;
- }
- }
- return 0;
-}