Невозможно установить WSPStartup как экспорт DLL

Я пытаюсь написать 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 () ??

4

Решение

Поскольку прототип функции приведен в Ws2spi.h файл, добавление любых дополнительных спецификаторов к функции в определении приведет к тому, что компилятор даст
ошибка переопределения.

Также невозможно экспортировать его напрямую через declspec (dllexport), который создаст оформленное имя, так как спецификатор WSPAPI объявляет функцию как stdcall.

Чтобы смягчить все эти проблемы, я экспортировал метод в файл DEF, как показано в этой статье — Экспорт из DLL с использованием файлов DEF

Я полагаю, что это единственный правильный способ получить недекорированный экспорт функции WSPStartup () в вашу dll.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]