Использование нового API пула потоков Vista в DLL, также загруженной в XP (код пула потоков не используется в XP) - PullRequest
1 голос
/ 04 ноября 2011

Мы производим DLL, которая предназначена как для Windows 7, так и для XP. Мы хотим, чтобы наша DLL использовала более новый API пула потоков Vista, когда библиотека загружается в системе Windows 7, а не когда она загружается в системе XP.

Прямо сейчас мы попытались скомпилировать DLL с определением времени выполнения ОС, чтобы убедиться, что API Vista никогда не используется в системе XP, но мы все еще не можем зарегистрировать нашу DLL в системе Windows XP из-за отсутствия зависимости в kernel32 .dll ...

Есть ли способ обойти это, кроме создания двух отдельных версий DLL?

Заранее спасибо

1 Ответ

6 голосов
/ 04 ноября 2011

Почему вы не загружаете kernel32.dll динамически, используя LoadLibrary, а затем используете GetProcAddress, чтобы определить, доступны ли функции API пула потоков Vista, которые вам нужны? Если это так, хорошо, если они не возвращаются к более старым функциям API.

например. (Непроверенные)

typedef PTP_WAIT (WINAPI *FnCreateThreadpoolWait) (PTP_WAIT_CALLBACK,PVOID,
                                                   PTP_CALLBACK_ENVIRON);
HMODULE hLibrary;
FnCreateThreadpoolWait pFn;

hLibrary = ::LoadLibrary ("kernel32.dll");
pFn = (FnCreateThreadpoolWait) ::GetProcAddress (hLibrary,"CreateThreadpoolWait");
if (pFn == NULL) // Vista API not available
   .....
...