[v3 1/5] compobj.dll16: Implement CoLoadLibrary16 and CoFreeLibrary16.

Alexandre Julliard julliard at winehq.org
Mon Feb 13 06:56:30 CST 2017


Zebediah Figura <z.figura12 at gmail.com> writes:

> +static HRESULT dll_list_add(LPCSTR library_name, struct open_dll **ret)
> +{
> +    struct open_dll *dll;
> +    HMODULE16 library;
> +    FARPROC16 DllCanUnloadNow;
> +
> +    LIST_FOR_EACH_ENTRY(dll, &open_dll_list, struct open_dll, entry)
> +    {
> +        if(!strcasecmp(library_name, dll->library_name))
> +        {
> +            TRACE("found %s already loaded\n", debugstr_a(library_name));
> +            InterlockedIncrement(&dll->refs);
> +            *ret = dll;
> +            return S_OK;
> +        }
> +    }

I don't think that comparing file names is appropriate for 16-bit, only
the module name matters. You should probably call LoadLibrary16 in all
cases.

> +
> +    library = LoadLibrary16(library_name);
> +    if (!library)
> +    {
> +        ERR("couldn't load in-process dll %s\n", debugstr_a(library_name));
> +        return E_ACCESSDENIED; /* FIXME: or should this be CO_E_DLLNOTFOUND? */
> +    }

You'd need to check again if the dll already exists, like the 32-bit
code does.

-- 
Alexandre Julliard
julliard at winehq.org



More information about the wine-devel mailing list