我正在尝试为 winsock 编写 LSP,并且根据 MSDN 文档,该 dll 应该导出单个函数即。Ws2spi.h 中定义的 WSPStartup()
编译时出现错误:
error C2375: 'WSPStartup' : redefinition; different linkage
如果我附加
__declspec(dllexport)
对它的指示。另一方面,如果我使用
__control_entrypoint(DllExport)
它编译得很好,但实际上并没有导出函数。我使用依赖查看器进行了检查。为了确保其他 LSP 实现是否导出函数,我在 VMWares vsocklib.dll 和 mswsock.dll 上使用了依赖查看器,这两个 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;
}
那么我在这里做错了什么?如何制作导出 WSPStartup() 函数的 DLL?