Я пытаюсь написать LSP для winsock, и, согласно документации MSDN, dll должна экспортировать одну функцию, а именно. WSPStartup(), как определено в Ws2spi.h
При компиляции получаю ошибку:
error C2375: 'WSPStartup' : redefinition; different linkage
Если я добавлю
__declspec(dllexport)
директива к нему. С другой стороны, если я использую
__control_entrypoint(DllExport)
он компилируется нормально, но функция на самом деле не экспортируется. Я проверил с помощью средства просмотра зависимостей. Чтобы убедиться, что другие реализации LSP экспортируют функции или нет, я использовал средство просмотра зависимостей на VMWares vsocklib.dll и mswsock.dll, обе библиотеки экспортируют указанную функцию.
Моя примерная реализация выглядит следующим образом: -
// dllmain.cpp : Defines the entry point for the DLL application.
#include "stdafx.h"
#include <Ws2spi.h>
BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
__declspec(dllexport)
__checkReturn
int
WSPAPI
WSPStartup(
__in WORD wVersionRequested,
__in LPWSPDATA lpWSPData,
__in LPWSAPROTOCOL_INFOW lpProtocolInfo,
__in WSPUPCALLTABLE UpcallTable,
__out LPWSPPROC_TABLE lpProcTable
)
{
return 0;
}
Так что я делаю неправильно здесь? Как создать DLL, которая экспортирует функцию WSPStartup()??