zoukankan      html  css  js  c++  java
  • 用Visual Studio 2008创建VC++的ISAPI项目

    酒精 @ 2008-10-27 00:10 | 技术 4条评论

    在VC++ 6.0和VS2003中都有ISAPI的项目向导,用其开发ISAPI是很方便的,但是从Visual Studio 2005开始这个模板就没有了。

    如何在用Visual Studio 2008创建VC++的ISAPI项目,并且能够编译兼容32位和64位的操作系统的dll?

    通常情况下我们安装的Visual Studio 2008的VC++都没有包含64位的编译器,所以在创建项目之前,最好先安装64位编译器。

    可以通过控制面板->添加/删除程序->Visual Studio 2008->添加/删除功能->Visual C++->X64编译器和工具

    接下来我们就可以创建我们ISAPI项目了。

    1、打开Visual Studio 2008->文件菜单->新建->项目->其他语言->Visual C++->常规->空项目

    2、打开解决方案资源管理器视图->选择项目->添加新建项->C++文件(.cpp)

    3、根据第二步,再添加一个模块定义文件(.def)

    4、打开模块定义文件(.def)文件,根据需要的ISAPI的不同种类定义不同的模块方法

    • ISAPI_Extension

      LIBRARY Your_ISAPI_Extension_Name
      EXPORTS
      GetExtensionVersion
      HttpExtensionProc

    • ISAPI_Filter

      LIBRARY Your_ISAPI_Filter_Name

      EXPORTS

      GetFilterVersion

      HttpFilterProc

    5、(如果需要编译64位的ISAPI)打开生成菜单->配置管理器->活动解决方案平台:新建->键入或选择新平台:x64->从此处选择复制设置:WIN32

    6、打开解决方案资源管理器视图->选择项目->属性->配置->所有配置->平台->所有平台

    • 常规->输出目录:$(SolutionDir)$(PlatformName)\$(ConfigurationName)
    • 常规->中间目录:$(PlatformName)\$(ConfigurationName)
    • 常规->配置类型:动态库(.dll)
    • 常规->MFC使用:使用标准 Windows 库
    • 常规->字符集:未设置
    • 常规->全程序优化:使用链接时间代码生成
    • C/C++->常规->调试信息格式:程序数据库(/Zi)
    • (如果需要编译64位的ISAPI)C/C++->常规->检测64位可移植性问题:是(/Wp64)

    7、打开C++文件,输入你ISAPI相关的代码(这部分不做详细解释,以后的文章会详述),这里给段示例代码,用来更改HTTP Header中的Server属性

    #include <windows.h>

    #include <stdio.h>

    #include <stdlib.h>

    #include <httpfilt.h>

    DWORD DoSendResponse(HTTP_FILTER_CONTEXT * pfc, HTTP_FILTER_SEND_RESPONSE * pResponse);

    BOOL WINAPI __stdcall GetFilterVersion(HTTP_FILTER_VERSION *pVer)

    {

    pVer->dwFlags = ( SF_NOTIFY_ORDER_LOW | SF_NOTIFY_SEND_RESPONSE );

    pVer->dwFilterVersion = HTTP_FILTER_REVISION;

    strcpy(pVer->lpszFilterDesc, "Replace Server Header ISAPI filter, Version 1.0");

    return TRUE;

    }

    DWORD WINAPI __stdcall HttpFilterProc(HTTP_FILTER_CONTEXT *pfc, DWORD NotificationType, VOID *pvData)

    {

    switch (NotificationType)

    {

    case SF_NOTIFY_SEND_RESPONSE :

    return DoSendResponse(pfc, (HTTP_FILTER_SEND_RESPONSE *) pvData);

    default :

    break;

    }

    return SF_STATUS_REQ_NEXT_NOTIFICATION;

    }
    DWORD DoSendResponse(HTTP_FILTER_CONTEXT * pfc,HTTP_FILTER_SEND_RESPONSE * pResponse)

    {

    BOOL fServer = TRUE;

    DWORD dwServerError;

    fServer = pResponse->SetHeader(pfc, "Server:", "MyWebServer");

    if ( !fServer )

    {

    dwServerError = GetLastError();

    pfc->pFilterContext = (LPVOID)(DWORD64)pResponse->HttpStatus;

    }

    return SF_STATUS_REQ_NEXT_NOTIFICATION;

    }

    最后你就可以编译你的项目了,如果出现编译错误,可能Windows SDK,安装后增加相应的VC++引用即可。

    你也可以下载示例项目

  • 相关阅读:
    某个牛人做WINDOWS系统文件详解
    常用ASP脚本程序集锦
    LINUX基础:文件安全与权限
    proftpd+mysql+quota
    apache2.0.49tomcat5.0.19jk2建立virtualHost
    URL Redirection(转) Anny
    顶级域名后缀列表(转) Anny
    \u4E00\u9FA5意义 Anny
    How to POST Form Data Using Ruby(转) Anny
    How to get rid of 'Enter password to unlock your login keyring' in Ubuntu(转) Anny
  • 原文地址:https://www.cnblogs.com/0000/p/1521461.html
Copyright © 2011-2022 走看看