原创翻译 用gSOAP在Windows Embedded Compact (Windows CE)上架构webservice

Windows Embedded CE 6.0开发初体验(三)设置Boot-loader 上一篇《Windows Embedded CE 6.0开发初体验》之“CE开发环境”:http://blog.youkuaiyun.com/aawolf/archive/2007/10/11/1820278.aspx 在Digi CC 9P开发板中已经预置了Boot-loader和一个CE 6.0的系统,所以,我们直接启动开发板,就可以运行一个CE 6.0的操作系统。不过,我们的最终目的是要开发一 阅读详情

本文转载自微软嵌入式中文社区 www.msembed.com

 

 

在本文中我将讨论怎样在Windows Embedded Compact设备上架构webservice。

你当然可以在一个智能设备上用托管代码来访问webservice,但是不幸的是用托管代码在设备上来架构一个webservice是不可能的。所以让我们再回到古老但却好用的本机代码上来吧!

 


 我将会使用gSOAP,一个第三方框架,它将为我们做大多数无聊麻烦的工作。听上去简单是么?让我们现在就开始吧!
 

 

最重要的部分是WSDL(Web Services Description Language)文件。WSDL是一个XML文档,该文档提供了我们将要在设备上提供的服务的接口描述。这里我将不会花太多时间来解释WSDL的语法,在WSDL在线指南上可以找到很多关于WSDL语法的消息。

 


 让我们先看一个非常简单的WSDL文件,它只描述了一个简单的webservice方法:string HelloWorld(string name)

 


wsdl:
<?xml version="1.0" encoding="utf-8"?><definitions name="HelloService"  targetNamespace="http://www.YourServer.com/wsdl/HelloService.wsdl"  xmlns="http://schemas.xmlsoap.org/wsdl/"  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"  xmlns:tns="http://www.YourServer.com/wsdl/HelloService.wsdl"  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <message name="HelloWorldRequest">    <part name="name" type="xsd:string"/>  </message>  <message name="HelloWorldResponse">    <part name="answer" type="xsd:string"/>  </message>
  <portType name="HelloWorld_PortType">    <operation name="HelloWorldOperation">      <input message="tns:HelloWorldRequest"/>      <output message="tns:HelloWorldResponse"/>    </operation>  </portType>
  <binding name="HelloWorld_Binding" type="tns:HelloWorld_PortType">    <soap:binding style="rpc"      transport="http://schemas.xmlsoap.org/soap/http"/>    <operation name="HelloWorldOperation">      <soap:operation soapAction="HelloWorldAction"/>      <input>        <soap:body          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"          namespace="urn:examples:helloservice"          use="encoded"/>      </input>      <output>        <soap:body          encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"          namespace="urn:examples:helloservice"          use="encoded"/>      </output>    </operation>  </binding>
  <service name="HelloWorld_Service">    <documentation>WSDL File for HelloService</documentation>    <port binding="tns:HelloWorld_Binding" name="HelloWorld_Port">      <soap:address        location="http://Topaz:8080"/>    </port>  </service></definitions>
  

 

你可以看到在此WSDL文件中的<definition></definition>标签对(此标签对是必需的)中有六个主要的标签:
1)  types
描述方法的参数和返回值的数据类型。
 

 

2)  message
被传输数据的抽象定义。一个message由若干逻辑部分组成,每一部分都和某个类型系统的定义相关联。
 

 

3)   portType
一组抽象操作。每个操作都引用了一个输入消息和输出消息。
 

 

4)binding
为由portType定义的操作和消息指定具体的规约和数据格式。
 

 

5)  port
为一个binding确定一个地址,这样就确定了单个通信端点。
 

 

6)  service
用来聚合一组相关的ports,来设置实际服务所在的网络位置。

 

 

基本上Type、Message和portType 描述了webservice的方法,binding、port和service描述了怎样在socket上传输数据。
 

 

位置信息中包含了提供webservice服务的设备的server的ip地址或主机名。在这个例子中我用了一个Topaz设备(你要根据你的设备的IP地址或主机名进行相应改动)。
 

 

在对WSDL进行简单描述后,让我们开始创建相应的Visual Studio 2008 project。这是工作量最大的部分。
 在生成实际的VS2008 project之前,我们还须做以下几步工作:
 

  1. 将WSDL文件导入一个空project
  2. 用gSOAP通过wsdl2header.exe生成一个头文件
  3. 用gSOAP生成对应的.cpp实现文件
  4. 实现我们的方法 

 

由于gSOAP会自动生成很多文件,我将会把自动生成文件和实际的实现文件分开处理,这样我们就可以把精力集中在实现文件上。让我们现在开始生成一个Visual Studio的空project并加入WSDL文件。
 

步骤1:将WSDL导入一个空project
 打开Visual Studio并生成一个新的C++ smart device project(File菜单 | new | Project),输入HelloWorldWebService 做为solution的名字。
 

 选择OK,并在接下来的"Welcome to the Win32 Smart Device Project Wizard" 对话框中点击next。在下一个"platforms"对话框中选择你的目标设备的SDK。正如你看到的我选择的是Topaz设备(http://guruce.com/topaz)。 选择next:
 
 
 在"project setting"对话框中选择 "console application"和"empty project"然后点击finish。
 
 

生成此solution后,在solution explorer(通常这是缺省可见的,如果没有,选择View | Solution Explorer)中的"header"区添加一个新的"gsoap"过滤器(右击 "Header Files", 选择Add->New Filter),在"source"区中添加同样的过滤器。我们将让gSOAP在此处生成文件。现在在你的solution的文件夹中新建一个后缀名为.wsdl的文件。将上面的示例WSDL拷贝到文件里,然后将此wsdl文件加入solution中(右击solution然后选择"add existing item")。在此处我的文件名为 HelloWsdl.wsdl。如下图所示:

 步骤2:用gSOAP从我们的wsdl中生成头文件。
 首先下载gSOAP来获得需要的工具。你可以从此处下载:
  http://sourceforge.net/projects/gsoap2/files/
 将解包的文件保存在一个适合记忆的文件夹中,因为在后面我们会在visual studio project中引用此文件夹路径。
 现在我们回到你的solution中,右击wsdl文件然后选择properties。在"Custom build step"中的"Command Line"区中加入如下命令(注意我将gSOAP工具放在$(SolutionDir)中,请确认你的路径并确保你的solution目录不包含任何空格):
 $(SolutionDir)/gsoap-2.8/gsoap/bin/win32/wsdl2h.exe -s $(InputPath) -o $(ProjectDir)$(InputName).h
 这将使用wsdl2h.Exe来生成我们的头文件。参数中指定了输入和输出文件。在property页的"Outputs"项中输入:
 $(InputName).h 
 
 你需要填入"outputs"项来让wsdl"可编译"。注意此处路径中包含了版本号(gsoap-2.8)。这个当然是可以改变的。还要注意我的这个"setting"对应"All Configurations",并不仅是对当前的这一个。 
 

 

 点击"Apply"和"Ok",然后再一次右击wsdl文件并选择"Compile"。
 

 

 现在我们的头文件 (HelloWsdl.h)已经在project目录中生成好了,我们需要将此文件加入到project中。在solution explorer中的header区右击"gsoap"目录,然后选择"add existing item"。选择HelloWsdl.H并加入。
 让我们为生成cpp文件做同样的事情:
 

 

步骤3:用gSOAP生成cpp源文件。 
 在solution explorer中右击我们刚才在上一个步骤中加入的HelloWsdl.h,选择"properties"。在"Custom build step"中加入如下的命令:
 $(SolutionDir)/gsoap-2.8/gsoap/bin/win32/soapcpp2.exe -S $(InputPath) 
 

 

在"Outputs"项中填入:
 $(InputName).cpp 
 
 

 右击HelloWsdl.H文件并选择"Compile"。这将也会生成一些文件,不过现在还不能编译整个solution。如果现在你要编译这个solution,像我刚开始用gSOAP时做的那样,你将会遇到很多编译错误。所以我们还要多做几步工作。
 

 在solution explorer中的header区右击"gsoap"目录并加入如下头文件:
 - soapH.h    - soapStub.h  
 

 

 在solution explorer中的source区右击"gsoap"目录并加入如下cpp文件:
 - soapC.cpp    - soapServer.cpp 
 

 

下一步是在solution中加入stdsoap2.h和stdsoap2.cpp。你可以在"gsoap-2.8/gsoap"目录中找到这两个文件。在solution explorer中右击project选择"Add existing item"。它们会自动出现在对应的"header"和"source"区中。
 

 

我们已经将stdsoap2.h加入到了solution中,不过我们还须将stdsoap2.h所在的目录路径加入到project的 "include directory list" 中。在solution explorer中右击project选择"Properties",在"Configuration Properties" | C/C++ | General中选择"Additional Include Directories ",将"$(SolutionDir)/gsoap-2.8/gsoap"加入到头文件目录列表中。
 

 

现在我们已经做完了生成文件的工作,让我们开始动手写代码吧!
 

 

 步骤4:实现我们的方法
 首先我们要创建包含主定义和具体方法的cpp源文件。在这里我用了两个分开的文件。第一个文件包含服务器代码用于侦听接入请求/消息。第二个文件将实现我们的webservice的方法。
 

 

 在Solution Explorer中右击"Source Files"并选择"New Item"。选择C/C++文件并将文件命名为HelloWsdl.Cpp。用同样的方法创建HelloWsdlMethods.Cpp文件。 
 

 

 你的整个solution应该看起来像这样:
 
 让我们从容易的开始。打开HelloWsdlMethods.cpp,将以下代码片断拷贝并粘贴到文件里:
 

 

#include "soapH.h"
int ns1__HelloWorldOperation(struct soap*,                             char*  name,       /// 请求参数                             char*  &answer     /// 响应参数){    printf("Hello my method/r/n");
 char* myName = {"Erwin"};    answer = myName;    return SOAP_OK;}
 

 

如果你在加入以上代码之前编译project,你将会在错误信息列表中发现关于这个方法的unresolved external错误。以上的方法由gSOAP自动生成声明,并在上边的代码片断中实现。你可以在自动生成的soapStub.h文件中找到该方法的声明:
/************************************************************************/* 服务器端操作                                                    /************************************************************************/
SOAP_FMAC5 int SOAP_FMAC6 ns1__HelloWorld(struct soap*, char *name, char *&answer);
   

 

这里就是在WSDL中加入的方法的声明部分的所在位置。
 

 

我们已经离完成整个工作不远了!最后我们需要做的是加入服务器代码。此代码用于等待来自任意客户端的请求。下面就是代码。它可能起初看上去有点复杂,不过别被它吓倒了。这些代码取自gSOAP网站(文档部分中的章节7.2.3 怎样生成一个单机服务器),只做了一些小改动,我会在下面加以说明:
 

 

/** 包含命名空间结构 */#include "HelloWorld_USCOREBinding.nsmap"
int _tmain(int argc, char* argv[]){   struct soap soap;    int m, s; // master and slave sockets    soap_init(&soap);   soap_set_namespaces(&soap, namespaces);      //** 设置命名空间 **/   m = soap_bind(&soap, "", 8080, 100);         //** 让字符串为空,gSOAP会找出我们的"localhost"具体是什么 **/   if (m < 0)       soap_print_fault(&soap, stderr);    else   {       fprintf(stderr, "Socket connection successful: master socket = %d/n", m);       for (int i = 1; ; i++)       {         s = soap_accept(&soap);          if (s < 0)           {             soap_print_fault(&soap, stderr);             break;          }       fprintf(stderr, "%d: accepted connection from IP=%d.%d.%d.%d socket=%d", i,             (soap.ip >> 24)&0xFF, (soap.ip >> 16)&0xFF, (soap.ip >> 8)&0xFF, soap.ip&0xFF, s);       if (soap_serve(&soap) != SOAP_OK) // process RPC request       soap_print_fault(&soap, stderr); // print error       fprintf(stderr, "request served/n");       soap_destroy(&soap);      // clean up class instances       soap_end(&soap);  // clean up everything and close socket       }    }    soap_done(&soap); // close master socket and detach context
   return 0;}
  

 

拷贝并粘贴以上代码到HelloWsld.cpp中。
  

 

改动部分用(/** */)加以注释。加入的部分用于包含一个命名空间结构来显式地设置正确的命名空间。gSOAP (soapcpp2.exe)不仅自动生成代码文件,而且还生成一个*.nsmap文件,该文件生成了一个包含有用到的正确的命名空间的静态结构体。soap_set_namespaces()方法用于将该结构体投入使用。就是这样了!
  

 

看上去好像有很多工作,不过当你的project生成完毕后,你的接口文件(wsdl)中的任意改动都会自动反映在实现部分中。project生成完毕后,大多数情况下你只需要改动wsdl文件和HelloWsdlMethods.cpp来加入你自己的方法。     
 

 

现在我们已经在Windows CE上生成了服务器,接下来我们要生成一个客户端来使用我们的服务:
 C#托管客户端
 

 

生成一个只有一个窗体的C#.NET桌面应用程序(这里我不会详细介绍如何生成一个C#.NET应用程序,因为这超出了本文的范围,我假定你已经知道怎么做这件事)。给该窗体加一个按钮并给予命名。然后我们需要将webservice的引用(wsdl文件)加入到solution中。在solution explorer中右击"References"并选择"Add Service Reference"。在Address输入框中输入wsdl文件的本机路径。在我这里是:
 

 

C:/Data/Development/HelloWorldWebService/HelloWorldWebService/HelloWsdl.wsdl.我将此引用命名为HelloWsdlMethods,它将出现在solution explorer中。然后点击"Go":

在主窗体中双击按钮并将以下代码粘贴到按钮点击事件处理函数中:
 

 

private void btnTest_Click(object sender, EventArgs e){    try    {        HelloWsdlMethods.HelloWorld_PortTypeClient server = new HelloWsdlMethods.HelloWorld_PortTypeClient();        string name = server.HelloWorldOperation("Dummy");        MessageBox.Show(name);    }    catch (Exception error)    {        MessageBox.Show("Request failed: " + error.Message);    }}  
 

 

 这些代码将访问我们的服务器并调用webservice的方法。如你所见命名可能不是很好,但对于这个例子来说够用了。
 

 

在目标设备上运行服务器程序(HelloWorldWebService.exe),在桌面上运行客户端程序。如果一切都没错的话,在点击"Test"按钮后你将看到如下:
 

在桌面上运行的C#客户端:
 
 

在Windows Embedded Compact设备上的应用程序控制台:
  
 

需要特别注意的事情
 正如你已经看到的,将gSOAP和Visual Studio 2008完美地结合在一起需要做一些工作。这个过程比较容易出错,gSOAP的事件记录在大多数情况下并不能帮助太多。以我的经验,基本上有三个地方比较容易出错:
 位置
 这个wsdl文件中的标签指定了webservice运行的网络地址。请确认它被正确设置。
 

 

 命名空间
 请确保wsdl文件中使用的命名空间和源代码文件中的命名空间(使用nsmap文件)相一致,并且别忘了调用soap_set_namespaces()。
 

 

主机名 
 请确认主机名为空:soap_bind(&soap, "", 8080, 100)。在CE上指定主机名没用。还有wsdl2h.exe和soapcpp2.exe这两个工具有很多选项,在本文中没有涉及到。但是花时间来了解这些选项是绝对值得的。gSOAP网站上有很多信息和详细的文档。
 

 

 当然,本文用了一个很简单的例子来介绍如何用gSOAP在Windows CE上使用webservices, 但是这应该足够能让你开始在智能设备上架构更加复杂的webservice。
 

如果你想看到一些更复杂的例子(比如通过webservices来传输文件),请和我们联系。
 祝

 

好运! 
  
 
 

Windows Embedded CE 6.0开发初体验(五)构建CE平台  构建CE平台上一篇《Windows Embedded CE 6.0开发初体验》之“跑个应用程序先”:http://blog.youkuaiyun.com/aawolf/archive/2007/10/19/1833230.aspx 接下来的一节会有非常多的图,因为我们要在Visual Studio 2005里创建一个CE 6.0的平台(Platform)了。创建CE平台的方法和创建普通工 阅读详情

相关推荐

VS2008 C#开发WinCE系统程序开发详细步骤

使用VS2008+SQLite开发的WinCE系统下的PDA程序开发,自己写了一个小Deom,希望可以帮助到初次接触这个的人。文档中提到所需要的安装资源我也会放上去的。

win系统问题

1. 错误: 安装ubuntu1 8.04 ,grub安装不了 解决方法:采用GUID分区,重建ESP分区 2. 错误:win7 安装之后蓝屏 解决方法:重新分区,保证系统盘是c盘 3. 错误:安装双系统之后找不到Linux 解决方法:按ESC键,或是引导修复 4. 设置win7为第一启动项 ‌解决方法:运行sudo gedit /etc/default/grub...

天涯过客 203

【软考高级架构设计师】——2025年上半年软考真题(回忆版)

a)异构计算和算法优化b)资源抽象和容器控制c)安全和隔离(大致是这个意思)

小志的博客 4830

适用于 Windows CE .NET 的 Microsoft .NET Framework 精简版(转)

 适用于:Microsoft® Windows® CE .NETMicrosoft Platform Builder 4.0Microsoft .NET Framework 精简版Microsoft .NET摘要:Microsoft Windows Embedded MVP Paul Yao 概要介绍了 Microsoft .NET 如何适用于 Windows Embedded Devel

rodger_br的专栏 2207

2026年数据中心运行与管理专业人才培养基地建设方案(高职、数据中心运行与管理新专业、人才培养、专业代码:510310)

摘要: 为响应国家“东数西算”战略和数字经济需求,我校拟联合行业领军企业建设数据中心运行与管理人才培养基地。项目基于国家政策引导和产业快速发展背景,针对行业10万人才缺口,对标教育部新设专业标准(510310),分三阶段实施五年规划:专业奠基(2026-2028)、内涵深化(2028-2029)、辐射引领(2030-2031)。建设内容涵盖校企协同岗位能力分析、模块化课程开发(如网络管理、自动化运维等)、实训基地搭建及“课证融通”培养模式,重点培养基础设施、网络服务、运维托管三类岗位技能人才,目标建成区域性

啊碧根果的博客 1686

GradNorm:Gradient Normalization for Adaptive Loss Balancing in Deep Multitask Networks,梯度归一化

文章目录引言gradnorm   gradnorm论文地址:https://arxiv.org/abs/1711.02257   gradnorm是一种优化方法,在多任务学习(Multi-Task Learning)中,解决 1. 不同任务loss梯度的量级(magnitude)不同,造成有的task在梯度反向传播中占主导地位,模型过分学习该任务而忽视其它任务;2. 不同任务收敛速度不一致;这两个...

Leon_winter的博客 2万+

Windows CE嵌入式导航系统研究( 嵌入式系统的概述)

1.1 嵌入式系统的概述 1.1.1 嵌入式系统的定义与组成 嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可裁减,适用于应用系统,对功能、可靠性、成本、体积和功耗等方面有特殊要求的专用的计算机系统。嵌入式系统与通用计算机系统的本质区别在于系统应用不同,嵌入式系统是将一个计算机系统嵌入到对象系统中。这个对象可能是庞大的机器,也可能是小巧的手持设备,用户并不关心这个计算机系统的存在。嵌入式系统涉及计算机技术、微电子技术、电子技术、通信和软件等各行各业,它是一个技术密集、资金密集、高度分散、不断创新的

Tech is Online(物联网技术传播) 1587

什么是plm系统?-数字化转型网

当今世界,产品研发能力是企业在激烈的市场竞争中保持战略优势的核心竞争力之一。如何有效地缩短产品研发周期、改善产品服务的设计迭代流程、有效降低产品的研发成本,也是企业面临的主要问题之一。PLM(Product Lifecycle Management,产品生命周期管理)在优化产品研发的全管理流程、增强企业产品的市场竞争力方面具有关键的作用。

cxo17757154043的博客 883

原创翻译 在Windows CE上实现一个全功能的webserver

本文转载自微软嵌入式中文社区 www.msembed.com  摘要当开发人员在Windows CE上实现一个webserver时,他们通常会想到要实现PC平台上的webserver有的大多数的功能。但是对于Windows CE IIS来说这不可行。Windows CE IIS对于有些功能特性不支持,例如过程标号(session ID).本文描述了如何通过互联网服务器应用程序编程接口(

WinCE7的专栏 1323

【hadoop编译报错】(yarn install) on project hadoop-yarn-applications-catalog-webapp Failed to run task

ambari+bigtop自定义组件集成

TTBIGDATA的博客 1804

生成模型实战 | ProGAN详解与实现

Progressive GAN (ProGAN) 是一种通过渐进式增长网络结构来生成高分辨率、高保真图像的技术。传统 GAN 难以直接生成超过 256x256 分辨率的图像,而 ProGAN 创新性地从低分辨率开始训练生成器和判别器,逐步添加网络层以提高分辨率,直至达到1024x1024。该方法结合了像素归一化、小批次统计信息和均衡化学习率等关键技术,并使用 WGAN-GP 损失函数确保训练稳定性。ProGAN 是首个能生成1024x1024高保真人脸图像的模型,但其训练耗时较长,且对计算资源要求较高。

盼小辉丶的博客 1435

Windows Embedded CE 6.0开发初体验

<br />(源自:http://www.j2medev.com/windowsmobile/ShowArticle.asp?ArticleID=5102)<br />(一)Windows CE概述 <br /><br />这篇文章的目的并不是介绍Windows Embedded CE开发的方方面面,只是用一个初涉嵌入式领域的软件开发者的视角来介绍Windows CE开发中最常用的概念和知识,解决大家会在实际开发中碰到的一些小问题,让大家了解嵌入式开发与应用程序开发,到底有哪些不同。Windows CE概述

有家客栈 君子不器 1114

路径跟踪 | 图解纯追踪算法Pure Pursuit(附ROS C++/Python/Matlab仿真)

纯追踪算法(Pure Pursuit)参考了人类驾驶行为,其基本思想是在待跟踪路径上设置预瞄点(goal-ahead),通过简单的几何方法驱动机器人跟踪预瞄点直至抵达目标位置.本文详细推导纯追踪算法的理论原理及其变种——自适应纯追踪算法(APP)和规范化纯追踪算法(RPP),并提供ROS C++/Python/Matlab三种仿真实现加深理解

FRIGIDWINTER的博客 8410

Windows Embedded CE 6.0开发环境的搭建

最近要做一个Windows CE系统上的串行通讯程序,因为在此之前并没有接触过有关Windows嵌入式方面的应用开发,所以搭建开发环境成了摆在面前的第一道难题。本文将记录并总结我搭建Windows Embedded CE 6.0开发环境的步骤和过程中碰到的问题,希望给同为Windows嵌入式开发初学者的朋友们提供一个参考。 我最终确定的开发环境方案为:Windows XP...

weixin_34259232的博客 294

在 SAP 里玩转 FTP:标准程序 RSFTP00x 全景解析与落地实践

摘要:SAP系统通过封装的标准FTP程序(RSFTP001-008)提供便捷的文件传输能力,适用于各类集成场景。关键点包括:1)依赖SAPFTP可执行程序和RFC目的地;2)使用RSFTP005进行前置检查并生成RFC配置;3)标准报表各司其职,如RSFTP002用于命令测试、RSFTP007/008提供参考实现;4)开发时组合FTP_CONNECT/COMMAND/DISCONNECT等函数模块。特别注意前台(SAPFTP)与后台(SAPFTPA)的环境差异,这是常见故障点。该方案通过标准化工具链显著降低

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 210

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

[转] 常见WinCE启动失败原因分析

***********************************************      一般情况下,为设计中的IC开发SW方案,难免会碰到Bootloader/EBoot/OS启动失败的情况,对于Bootloader和EBoot,由于源代码很少,直接使用Trace32调试是最佳方法,对于OS,最佳的方法当然是MAC KITL。      对于直接拿着厂商sw方案做项目的哥

guopeixin的专栏 1598

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

记一次Windows Embedded CE应用程序崩溃的摸索

一次很难忘的Bug Fix,记录一下以便以后归纳总结一下。对于应用程序、系统关键进程Crash等Bug相信会比较让人头痛,这次就让我头疼了1个星期, 一方面因为代码规模较大,另一方面对这样的Bug没有什么经验。 Bug Description 打开一个Word文档,“另存为”操作时弹出“没有足够的内存保存文档”,并抛出异常: 297006 PID:a6b00fe TID:a6c00...

weixin_34111819的博客 350

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Windows Embedded CE 6.0 R3简介

     很长时间没有关注WinCE平台了,就在前几天(11月6日)在北京举行的Tech•Ed 2009上,微软公司宣布推出Windows Embedded CE 6.0 R3的RTM(Release To Manufacturing,生产)版本,才重新对WinCE有了更深的认识。    Windows Embedded CE 6.0 R3新增的功能、特性及优势包括:    • 高保真的用户体

刘洪峰AIoT | 一叶启帆·万物智联 2761

VS 2008 mfc 智能应用程序 调用 C# webservice.(二)(gsoap+wince)

在桌面窗体应用程序 ,服务调用成功 ,上传文件成功了,本以为WM中也是一样啊 依葫芦画瓢,靠,没想到啊。。。。。。。。。。。。 项目->属性->常规->公共语言库支持,靠 没有这一选项。。。难道不能调用服务了在MFC native c++ 中?怎么办 怎么办 怎么 办 ?慌了 网上看了 用gsoap gsoap?什么东西啊 ,没见过,又折腾了好久 1 Gsoap 使用 ...

weixin_30567225的博客 158

【数据结构-5】单链表的实现

单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。

weixin_44218929的博客 198
上一篇: 原创翻译 Windows Embedded Compact 7: 带有ActiveSync的Silverlight Shell
下一篇: Cloud Foundry参赛博文——Cloud Foundry安装初体验
巴斯滕
博客等级 码龄16年 319粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值