Предотвращение слишком большого количества LoadLibrary / FreeLibrary

Я пишу прокси-библиотеку (называемую Библиотекой A), которая является просто интерфейсом для другой DLL (называемой Библиотекой B), которая может присутствовать или отсутствовать в системе . Идея состоит в том, что программа будет связываться с этой библиотекой A вместо исходной библиотеки B; и библиотека A обработала бы ошибки, если бы библиотека B не была установлена ​​в системе.

Итак, типичная функция прокси будет выглядеть так:

int function(int arg1, int arg2)
{
    HINSTANCE hinstLib;
    UINT errormode = SetErrorMode(SEM_FAILCRITICALERRORS);
    SetErrorMode(errormode | SEM_FAILCRITICALERRORS);
    hinstLib = LoadLibrary(TEXT(ORIGINAL_DLL));
    SetErrorMode (errormode);
    if (hinstLib != NULL)
    {
        ProcAdd = (void *) GetProcAddress(hinstLib, TEXT("function"));
        if (NULL != ProcAdd)
        {
            return (ProcAdd) (arg1, arg2);
        }
        FreeLibrary(hinstLib);
    }
    return ERROR;
}

Теперь я бы сделал это для всех исходных записей в библиотеке B. будет много звонков к нему. Так что частая загрузка / выгрузка DLL определенно повлияет на скорость.

Мне было интересно, можно ли использовать глобальную переменную hinstLib; что-то вроде

HINSTANCE hinstLib = LoadLibrary(TEXT(ORIGINAL_DLL));

int function(int arg1, int arg2)
{
    if (hinstLib != NULL)
    {
        ProcAdd = (void *) GetProcAddress(hinstLib, TEXT("function"));
        if (NULL != ProcAdd)
        {
            return (ProcAdd) (arg1, arg2);
        }
    }
    return ERROR;
}

И пусть Windows автоматически выгружает DLL при выходе из программы (при условии, что она выгружает ее).

Заранее спасибо за ваши мудрые замечания ...

Jean-Yves

1
задан jyavenard 2 October 2010 в 09:32
поделиться