当前位置:编程学习 > wap >>

C/C++与WAP的综合应用

答案:
C/C++与WAP的综合应用
使用C/C++也可生成WAP页面和开发出复杂的WAP应用。我们仍以WML为例来说明C/C++在WAP开发中的具体应用。当然,用户首先应当在自己的系统中安装好诸如Visual C++的开发系统,并使之能够正常运行,而且要具有一定的CGI基本知识,了解C/C++的语法及函数。



11.5.1 基本规则
使用C/C++编写WML程序的基本规则如下:

(1) 程序行语句均以分号( ; )结尾,这与C/C++语言的原本要求是一致的。

(2) 使用printf语句来编写(输出)WML的标签或语句,并在WML行后面加上换行符“\n”。基本格式为:

printf("……(WML标签或语句行)\n");

如果WML标签或语句中有引号等特殊字符,则应采用C/C++的书写规则,比如将引号(")加上斜杠“\"”。

下面的语句就说明了使用C/C++的printf编写WML程序的例子:



printf("Content-type: text/vnd.wap.wml\n\n");

printf("<?xml version=\"1.0\"?>\n");

printf("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN");

printf("\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\n");

printf("<wml>\n");

printf(" <card id=\"datecard\" title=\"MyWMLCC\">\n");

…………



与C/C++的其他语句一样,WML的语句也要放在C/C++的函数中予以实现,后面的举例会说明这一点。

(3) 使用C/C++语言编写WML程序时,C/C++的注释符“//”及“/* …… */”仍然可以使用,其他编程规则及预编译文件等均可采用。

(4) 文件最后保存时采用的扩展名为C/C++程序文件及预编译文件的扩展名,不能再使用“.wml”等扩展名。

11.5.2 程序举例
熟悉C/C++的读者都知道,利用C/C++可以实现极为广泛和复杂的应用,但程序规模通常也比较大,因此我们这里的篇幅恐怕不允许我们讨论过于复杂的例子。下面我们只通过一个比较简单的例子,说明使用C/C++开发WML页面应用的方法。

我们这个例程利用CGI功能实现了WAP浏览器的动态输出效果。程序很简单,我们就不过多解释了。程序清单如下:



#include <stdio.h>

#include <stdlib.h>

#include <time.h>

#include <string.h>

void GenerateCGIHeader();

void GenerateCGIFooter();

/*--------------------------------------------------------------*/

int main(int argc, char* argv[])

{

  char tmpBuf[128];

  char strGET[]="GET";

  if (getenv("REQUEST_METHOD") == NULL)

  {

    printf("This script is not intended to run from shell.\n");

    return -1;

  }

  // 检查request的方法(method)是否是GET

  strcpy(tmpBuf, getenv("REQUEST_METHOD"));

  if (strcmp(tmpBuf, strGET) != 0)

  {

    printf("This script requires use of GET-method.\n");

    return -1;

  }

  /* 显示WML页面内容 */

  GenerateCGIHeader();

  /* 显示操作系统日期和时间 */

  _strtime( tmpBuf );

  printf( "OS time:%s\n", tmpBuf );

  _strdate( tmpBuf );

  printf( "OS date:%s\n", tmpBuf );

  /* 结束WML页面的显示 */

  GenerateCGIFooter();

  return 0;

}



/*--------------------------------------------------------------*/

void GenerateCGIHeader()

{

  /* Generate header for CGI response */

  printf("Status: 200\n");

  printf("Content-type: text/vnd.wap.wml\n\n");

  printf("<?xml version=\"1.0\"?>\n");

  printf("<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN");

  printf("\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">\n");

  printf("<wml>\n");

  printf(" <template>\n");

  printf(" <do type=\"prev\" label=\"Back\">\n");

  printf(" <prev/>\n");

  printf(" </do>\n");

  printf(" </template>\n");

  printf(" <card id=\"datecard\" title=\"CGIDate\">\n");

  printf(" <p>\n");

}



/*--------------------------------------------------------------*/

void GenerateCGIFooter()

{

  /* Generate footer for CGI response */

  printf(" </p>\n");

  printf(" </card>\n");

  printf("</wml>\n");

}

/*--------------------------------------------------------------*/

上一个:实现点击图片连接时选择直接打开或下载
下一个:使用WML和ASP编写动态手机页面

更多图片编程知识:
更多wap疑问解答:
新人求助QPainter
为什么程序都退出了还可以收到推送?如果大多设备都可以推送那运营商怎么办?
qt 4.7 sqlserver2000 存储过程调用
关于ANDROID4.0.1编译问题!
Android FrameBuffer读屏幕30秒后mmap失败
联通粗定位用java程序如何来请求和接受数据
为什么QT运行Android平台的程序时,mouseMoveEvent事件响应的间隔时间很长??????????
android与PC蓝牙通讯
指定大小的label 内容可变,如果内容超出label的宽度,将未能显示的部分显示在另一个label上
Android调试
android如何通过wifi连接无线打印机
运行程序,release目录下产生一个乱码文件夹
分享个某机构最新安卓资料,自己验证了
service启动不起来,掉不了service connection
求助:QT5.0 没有QPrinter吗
asp
php
Delphi
Matlab
JSP
Foxpro
JS
C/C++
C#/ASP.NET
VC++
JAVA
VB
汇编语言
html/css
CGI
XML/UML
wap
网站相关
网页素材
python
微信小程序
thinkphp
如果你遇到编程学习难题:
访问www.zzzyk.com 试试
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,