构建Microsoft的LSP示例代码
用/使用VS2010构建
已安装Platform SDK(Microsoft Windows SDK v7.1)。
当我尝试构建示例LSP(位于C: Program Files Microsoft Platform SDK Samples NetDS WinSock LSP)时
! - 开始解决 - !
我得到以下两个错误中的16个。
Error 1 error C1083: Cannot open include file: 'nt.h': No such file or directory c:program filesmicrosoft sdkswindowsv7.1samplesnetdswinsocklspnonifslsplspdef.h 22 1 LSP
Error 7 error C1083: Cannot open include file: 'lspcommon.h': No such file or directory c:program filesmicrosoft sdkswindowsv7.1samplesnetdswinsocklspinstallinstlsp.h 35 1 LSP
当我将此示例的源代码添加到VS时,我使用File> New ProjectFrom Existing Code。
一旦我这样做,VS开始导入所有Platform SDK包含文件。我在其他地方读到没有来自PSDK的包含会导致问题,但这似乎不是这里的情况。
! - 结束决定 - !
在解决上述问题后,我现在又遇到了3个错误:
Error 1 error LNK2005: "struct _GUID gProviderGuid" (?gProviderGuid@@3U_GUID@@A) already defined in lspguid.obj C:Program FilesMicrosoft SDKsWindowsv7.1Samplesnetdswinsocklspinstlsp.obj LSP
Error 6 error CVT1100: duplicate resource. type:MANIFEST, name:1, language:0x0409 C:Program FilesMicrosoft SDKsWindowsv7.1SamplesnetdswinsocklspCVTRES LSP
Error 7 error LNK1123: failure during conversion to COFF: file invalid or corrupt C:Program FilesMicrosoft SDKsWindowsv7.1SamplesnetdswinsocklspLINK LSP
我没有更改LSP示例中的任何内容/文件。
目前我只是想建立它。
对此有任何见解会有所帮助。
谢谢。
没有找到相关结果
已邀请:
3 个回复
碧肮械淌设
这意味着,只有在未定义宏_PSDK_BLD时才包含nt.h文件(以及其他两个)。在第35行看一下,你会看到代码看起来像这样......
在这种情况下,如果未定义宏,则代码包含文件lspcommon.h,但如果定义了宏,则代码包含来自公共foider的文件lspcommon.h。 由于_PSDK_BLD未定义,似乎您的问题可能正在发生。从#ifdef的样式看,宏看起来不像任何特定的值,只是定义了。 在Visual Studio中,转到“项目属性”,深入查看“C / C ++”,然后查看“预处理器”。然后找到预处理器定义行并单击该值。现在选择编辑并将_PSDK_BLD添加到预处理器定义列表中。 注意该领先的下划线,并记住对Debug和Release配置进行更改(以及您可能已定义的所有平台) 错误LNK2005意味着链接器找到了它试图链接的对象的两个定义 - 这是一个问题,因为链接器无法分辨它应该使用哪两个定义。 在这种特殊情况下,链接器试图解析的对象是“struct _GUID gProviderGuid”。如果查看文件instlsp.h,lspdef.h(两者都有)和lspcommon.h,你会看到看起来像这样的代码
这声明了一个名为gProviderGuid的外部变量GUID类型(它是一个结构)。链接器必须在包含其中一个头文件的任何文件中解析该外部引用,然后引用gProviderGuid。 从错误中已经定义的“lspguid.obj”部分我们知道链接器已查看文件lspguid.obj并找到了gProviderGuid的定义。果然,如果我们查看lspguid.cpp,我们可以看到gProviderGuid的定义,其值为0xc5fabbd0。 从“C: Program Files Microsoft SDKs Windows v7.1 Samples netds winsock lsp instlsp.obj”部分同样的错误我们知道链接器也查看了文件instlsp.obj和找到了gProviderGuid的第二个定义。如果我们查看intlsp.cpp,我们可以看到gProviderGuid的另一个定义(这次没有任何值)。 接下来的问题是链接器正在查看lspguid.obj和intlsp.obj,并查找gProviderGuid的冲突定义。 这两个文件不应该是同一个构建的一部分,所以我们不应该期望链接器的单个运行同时读取它们。 LSP项目由四部分组成:lspcommon,用于生成静态库lspcommon.lib; ifslsp用于生成文件ifslsp.dll; nonifslsp用于生成文件nonifslsp.dll并安装用于生成文件Instlsp.exe。有关详细信息,请参阅lsp中的readme.txt文件和各种文件夹中的makefile文件。 如果要在Visual Studio中构建LSP,则在解决方案中确实需要四个不同的项目,分别用于lspcommon,ifslsp,nonifslsp和install。
凄嘛姥
琳娘
更改为
,看看它是否构建。