Вы можете обойти проблему компиляции, структурировав свой код (и предварительно скомпилированные заголовки) так, чтобы ни один файл не содержал как winsock.h, так и winsock2.h, это может означать, что вы вообще не используете предварительно скомпилированные заголовки или используете их всложнее, чем обычно в проектах MFC ...
Вы можете обернуть каждую DLL в объект COM и получить к ним доступ через COM из вашей основной программы.Преимущество заключается в том, что вы полностью отделяете использование двух DLL от вашей основной компиляции.
Вы можете обернуть каждую из DLL в новую DLL (по одной), которая предоставляет интерфейс для вашей программы, которому не нужны заголовки winsock в заголовках интерфейса.
Конечно, это можетпросто проблема с включенным порядком включения в Windows.h, попробуйте поместить это в верхнюю часть предварительно скомпилированного заголовка ...
#ifndef _WINDOWS_
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
#endif
#include <winsock2.h>