用Visual Studio 2008创建VC++的ISAPI项目
2009-07-11 16:39
302 查看
酒精 @ 2008-10-27 00:10 | 技术 4条评论
![](http://img.alcoholwang.com/static/2008/10/create_isapi_project_by_visual_studio_2008.gif)
在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编译器和工具。
![](http://img.alcoholwang.com/static/2008/10/visual_studio_2008_setup_vcpp_x64.jpg)
接下来我们就可以创建我们ISAPI项目了。
1、打开Visual Studio 2008->文件菜单->新建->项目->其他语言->Visual C++->常规->空项目
![](http://img.alcoholwang.com/static/2008/10/visual_studio_2008_create_isapi_project.jpg)
2、打开解决方案资源管理器视图->选择项目->添加新建项->C++文件(.cpp)
3、根据第二步,再添加一个模块定义文件(.def)
![](http://img.alcoholwang.com/static/2008/10/visual_studio_2008_create_isapi_project_addfile.jpg)
4、打开模块定义文件(.def)文件,根据需要的ISAPI的不同种类定义不同的模块方法
ISAPI_Extension
ISAPI_Filter
5、(如果需要编译64位的ISAPI)打开生成菜单->配置管理器->活动解决方案平台:新建->键入或选择新平台:x64->从此处选择复制设置:WIN32
6、打开解决方案资源管理器视图->选择项目->属性->配置->所有配置->平台->所有平台
常规->输出目录:$(SolutionDir)$(PlatformName)\$(ConfigurationName)
常规->中间目录:$(PlatformName)\$(ConfigurationName)
常规->配置类型:动态库(.dll)
常规->MFC使用:使用标准 Windows 库
常规->字符集:未设置
常规->全程序优化:使用链接时间代码生成
C/C++->常规->调试信息格式:程序数据库(/Zi)
(如果需要编译64位的ISAPI)C/C++->常规->检测64位可移植性问题:是(/Wp64)
![](http://img.alcoholwang.com/static/2008/10/visual_studio_2008_create_isapi_project_attribute_1.jpg)
![](http://img.alcoholwang.com/static/2008/10/visual_studio_2008_create_isapi_project_attribute_2.jpg)
7、打开C++文件,输入你ISAPI相关的代码(这部分不做详细解释,以后的文章会详述),这里给段示例代码,用来更改HTTP Header中的Server属性
最后你就可以编译你的项目了,如果出现编译错误,可能Windows SDK,安装后增加相应的VC++引用即可。
你也可以下载示例项目
![](http://img.alcoholwang.com/static/2008/10/create_isapi_project_by_visual_studio_2008.gif)
在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编译器和工具。
![](http://img.alcoholwang.com/static/2008/10/visual_studio_2008_setup_vcpp_x64.jpg)
接下来我们就可以创建我们ISAPI项目了。
1、打开Visual Studio 2008->文件菜单->新建->项目->其他语言->Visual C++->常规->空项目
![](http://img.alcoholwang.com/static/2008/10/visual_studio_2008_create_isapi_project.jpg)
2、打开解决方案资源管理器视图->选择项目->添加新建项->C++文件(.cpp)
3、根据第二步,再添加一个模块定义文件(.def)
![](http://img.alcoholwang.com/static/2008/10/visual_studio_2008_create_isapi_project_addfile.jpg)
4、打开模块定义文件(.def)文件,根据需要的ISAPI的不同种类定义不同的模块方法
ISAPI_Extension
LIBRARY Your_ISAPI_Extension_Name
EXPORTS
GetExtensionVersion
HttpExtensionProc
EXPORTS
GetExtensionVersion
HttpExtensionProc
ISAPI_Filter
LIBRARY Your_ISAPI_Filter_Name
EXPORTS
GetFilterVersion
HttpFilterProc
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)
![](http://img.alcoholwang.com/static/2008/10/visual_studio_2008_create_isapi_project_attribute_1.jpg)
![](http://img.alcoholwang.com/static/2008/10/visual_studio_2008_create_isapi_project_attribute_2.jpg)
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;
}
#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++引用即可。
你也可以下载示例项目
相关文章推荐
- VS2008创建Silverlight项目出错的解决办法--安装Visual Studio 2008的Silverlight 1.1 Tools Alpha无法创建Silverlight项目
- visual Studio 2008 创建项目失败
- Visual Studio 2008无法创建智能设备项目的解决方法
- Visual Studio 2008无法创建silverlight项目
- VS2008创建Silverlight项目出错的解决办法--安装Visual Studio 2008的Silverlight 1.1 Tools Alpha无法创建Silverlight项目
- Visual Studio 2008无法创建智能设备项目的解决方法
- visual studio 2008 创建cocos2d-x项目遇到的问题
- vs(2005 and 2008)中使用vc++创建智能设备项目失败的正确解决方案
- Visual Studio 2008无法创建silverlight项目
- Visual Studio 2008无法创建智能设备项目的解决方法
- Visual studio 创建不了vc项目的解决方法
- 在Visual Studio 2010中创建多项目(解决方案)模板【二】
- 解决 VS 2008 不能创建新项目,“The tools version “3.5″ is unrecognized ” 问题
- 关闭当前项目,开发工具正式升级至 Visual Studio 2008
- visual studio 2010 创建项目无法选择framework 版本
- Visual C# 2008+SQL Server 2005 数据库与网络开发――3.3.3 创建项目
- VC++/MFC(VC6)精品学习资料下载+Visual Studio 6.0/2008/2010下载
- Visual Studio 2008不能创建数据库连接出现:未能加载文件或程序集“Microsoft.SqlServer.Management.Sdk.Sfc, Version=10.0.0.0, Culture=neutral,PublicKeyToke
- 由于未能创建 Microsoft Visual C# 2008 编译器,因此未能打开项目 "xxx"
- 在VISUAL STUDIO 2013上创建IT++项目