猛禽--C++ Builder 6 BizSnap/SOAP/WebService(2)

uniapp实现加载图片失败显示占位图 平常在项目中,我们会经常需要有加载网络图片的功能,但是存在图片地址问题、网络问题等导致图片加载失败,需要展示一个占位图,所以我这里总结了三种办法,仅供大家参考,写的不好大家见谅。 一、比较省事的就是导入第三方插件,本人没有使用过,所以不知道质量如何,大家有兴趣可以去详细研究下(传送门) 二、监听image标签的@error事件进行占位图的显示,这里我直接贴代码,大家看看逻辑即可明白。 注意:这里有点不好的就是一开始显示的都是空白的,只有图片加载成功或者失败后才会显示正常图片还是占位图 data里 阅读详情
C++ Builder 6 BizSnap/SOAP/WebService(2)
-- 通过 SOAP 传递自定义类型数据

    本文将做一个略复杂的例子,实现通过 SOAP 传递自定义的数据类型。本例子的功能是在服务端通过 dbExpress 的数据访问控件取得数据表内容,然后将其通过 SOAP 传递到客户端再显示。

 

    服务端:
1.New|WebServices|Soap Server Application ,如下图,与 Delphi 6 + Update 2 相比,除了左上角的图标以外,完全相同:

《!--图丟了--》

选 Web App Debugger executeable 类型, CoClass Name 为:wadSoapDemo2 ,如下图:

《!--图丟了--》 

确定后将自动提示是否要新建一个接口,如下图,确定即可打开新建接口向导,如果要以后再增加接口,可以在 New|WebServices 中选择 SOAP Server Interface 同样可打开新建接口向导:

《!--图丟了--》 

2.新建接口向导如下图,输入接口名:DataTable 即可生成一个 SOAP 服务端接口:

《!--图丟了--》 

关于此向导的其它说明见《C++ Builder 6 BizSnap/SOAP/WebService(1) -- 一个 Hello world! 的例子》(以下简称《(1)》);
3.在生成后的 WebModule 单元中放入四个数据库控件: SQLConnection1, SQLDataSet1, DataSetProvider1, ClientDataSet1 ,其各属性设置如下表:

SQLConnection1ConnectionName = IBLocal;
LoginPrompt = false;
Params->Values["Database"] = "[...]//Examples//Database//Employee.gdb";
// 上面的 [...] 为你的 InterBase 安装路径
SQLDataSet1SQLConnection = SQLConnection1;
CommandText = "select FULL_NAME, PHONE_EXT";
DataSetProvider1DataSet = SQLDataSet1;
ClientDataSet1ProviderName = DataSetProvider1;

完成后的 WebModule 如下图:

《!--图丟了--》 

4.SaveAll , Unit1 命名为: MainWM , Project1 命名为: Demo2 , DataTable 不改名;
5.在接口单元的头文件(DataTable.h)中增加一个自定义的类 -- TDataSetPack ,如下:

class TDataSetPack : public TRemotable {
private :
    int        FCount;
    AnsiString FXMLData;


public :
    __fastcall TDataSetPack( TClientDataSet * aClientDataSet )
        : TRemotable(),
        FCount( aClientDataSet->RecordCount ),
        FXMLData( aClientDataSet->XMLData )
    {
    }

__published:
    __property int        Count   = { read = FCount   }; 
    __property AnsiString XMLData = { read = FXMLData };
};

自定义 SOAP 数据类型必须是从 TRemotable 类派生的,这一点与 Delphi 相同。其中 ClientDataSet 的 XMLData 属性是从 Delphi 6 开始新增的。其实 XMLData 中已经包含了记录数信息, Count 属性并不是必须的,这里为了演示自定义 SOAP 数据类型的使用,所以加入这个属性。注意:要在此头文件中加入:#include <DBClient.hpp>
5.定义及实现 GetEmployeeTable 函数,其方法与《(1)》中相同,下面是在接口头文件(DataTable.h)和单元文件(DataTable.cpp)中的接口/类定义和我们加入的方法及其实现:

//  DataTable.h
__interface INTERFACE_UUID("{CF057C28-4130-4508-9F24-0BBD1C2CA5F0}") 
    IDataTable : public IInvokable
{
public:
    virtual TDataSetPack * GetEmployeeTable( void ) = 0;  //  新增方法
};
typedef DelphiInterface
      _di_IDataTable;

//  DataTable.cpp
class TDataTableImpl : public TInvokableClass, public IDataTable
{
public:
    TDataSetPack * GetEmployeeTable( void );  //  新增方法

  /* IUnknown */
  HRESULT STDMETHODCALLTYPE QueryInterface(const GUID& IID, void **Obj)
                        { return GetInterface(IID, Obj) ? S_OK : E_NOINTERFACE; }
  ULONG STDMETHODCALLTYPE AddRef() { return TInterfacedObject::_AddRef();  }
  ULONG STDMETHODCALLTYPE Release(){ return TInterfacedObject::_Release(); }

  /* Ensures that the class is not abstract */
  void checkValid() { delete new TDataTableImpl(); }
};

//  新增方法的实现:
//  打开 ClientDataSet ,构造 TDataSetPack ,
//  关闭 ClientDataSet 和数据库连接
//  返回结果
TDataSetPack * TDataTableImpl::GetEmployeeTable( void )
{
    WebModule2->ClientDataSet1->Open();
    TDataSetPack * p = new TDataSetPack( WebModule2->ClientDataSet1 );
    WebModule2->ClientDataSet1->Close();
    WebModule2->SQLConnection1->Close();
    return p;
}

除了方法的实现部分以外,其它部分与《(1)》基本上一样。这个方法的实现功能,正如程序中的注释说明的那样,用于取得数据集并转换为我们定义的数据类型后返回。
6.注册接口及其实现类的部分也与《(1)》相同,就不再赘述了。
7.编译之即可产生: Demo2.exe ;

先运行一次 Demo2.exe ,完成注册的工作后启动 Web App Debugger 。打开浏览器, 输入 URL 为: http://localhost:1024/Demo2.wadSoapDemo2 即可看到一个标准的 SOAP 应用说明页面,点击进入相应链接即可看到相关的 WSDL ,在其中可以看到我们自定义的数据类型说明,如下面的 WSDL 片断所示:

  <types>
    <xs:schema targetNamespace="urn:DataTable" xmlns="urn:DataTable">
      <xs:complexType name="TDataSetPack">
        <xs:sequence>
          <xs:element name="Count" type="xs:int"/>
          <xs:element name="XMLData" type="xs:string"/>
        </xs:sequence>
      </xs:complexType>
    </xs:schema>
  </types>

    客户端程序:
1.New|Application 新建一个一般 VCL 应用程序;
2.SaveAll , Unit1 命名为 ClnMain , Project1 命名为 Client ;
3.New|Web Services|Web Services Importer :
在下图中的URL中输入: http://localhost:1024/Demo2.wadSoapDemo2/wsdl/IDataTable,

《!--图丟了--》 

如果上面用浏览器可以看到正确的 XML 文档的话,选择“Next”后将产生导入的结果,如下图:

《!--图丟了--》 

其中有我们在服务端定义的数据类型 TDataSetPack 、接口 IDataTable 及其方法 GetEmployeeTable ,选择完成即可生成接口单元;
4.SaveAll, IDataTable 单元不改名保存,再在 ClnMain 中 #include IDataTable.h ;
5.在 Form 上放上一个 ClientDataSet, DataSource, DBGrid, Button, Label 等几个控件,其各属性设置如下表:

ClientDataSet1全部默认
DataSource1DataSet = ClientDataSet1;
DBGrid1DataSource = DataSource1;
Button1Caption = "Fetch data";
Label1Caption = "Count:0";

完成后的 Form 如下图:

《!--图丟了--》 

6.双击 Button1 输入下面的程序:

void __fastcall TForm2::Button1Click(TObject *Sender)
{
    TDataSetPack * p = GetIDataTable()->GetEmployeeTable();

    Label1->Caption = AnsiString( "Count:" ) + IntToStr( p->Count );    
    ClientDataSet1->XMLData = p->XMLData;
}

7.编译运行,按 Button1 , DBGrid1 中将显示服务端返回的数据集内容, Label1 中将显示记录数,如下图;

《!--图丟了--》 

    这只是一个简单的数据库访问的例子,只能从服务端取回数据集, C++ Builder 6 中已经将 MIDAS/DataSnap 和 SOAP/WebService 结合,可以通过 SOAP/WebService 实现非常强大的数据库操作能力,这将在以后的文章中介绍。

C++Builder开发海康摄像头控制软件--摄像头图像预览与云台控制 C++Builder XE6开发的海康摄像头控制软件,摄像头图像预览与云台控制;http://blog.youkuaiyun.com/skysonya_shisy/article/details/70340201 立即下载

相关推荐

C++Builder 2007 soap/web service application

C++Builder 2007 soap/web service application

Web Service(三)—— SOAP学习

SOAP 指简易对象访问协议SOAP 是一种通信协议SOAP 用于应用程序之间的通信SOAP 是一种用于发送消息的格式SOAP 被设计用来通过因特网进行通信SOAP 独立于平台SOAP 独立于语言SOAP 基于 XMLSOAP 很简单并可扩展SOAP 允许您绕过防火墙SOAP 将被作为 W3C 标准来发展为什么使用 SOAP?SOAP 提供了一种标准的方法,使得运行在不同的操作系统并使用不同的技术和编程语言的应用程序可以互相进行通信。

此心光明事上练的博客 4550

半导体设备上位机开发:我的经验与新人指导

半导体设备上位机开发是一项复杂而富有挑战性的工作,需要扎实的技术基础和丰富的经验。如果你对半导体设备上位机开发感兴趣,欢迎随时与我交流,我会尽力帮助你!

qq_43518667的博客 2731

c++ builder image 不能打开JPG图片

1.头文件加入     2.Image只能打开bmp文件,所以必须将jpg文件转化成bmp文件         TJPEGImage*   tjpg=new   TJPEGImage();     Graphics::TBitmap*   tBitmap=new   Graphics::TBitmap();     tjpg->LoadFromFile("c://12.jpg");     tBi

kenmy03的专栏 3714

基于R语言的DICE模型实践技术应用;预测不同减排路径下的经济增长、碳排放量、气候变化程度以及社会福利变化

DICE模型是一个动态综合气候经济模型,由诺贝尔经济学奖得主William Nordhaus开发,用于评估气候变化对经济的影响以及不同减排政策的经济成本和效益。以下是一个关于DICE模型在气候变化影响评估中的实际应用案例,结合R语言代码进行讲解。

KY_chenzhao的博客 869

实战对比:VINS和ORBSLAM3在无人机避障中的表现(含实测数据)

本文通过实战测试,深度对比了VINS和ORBSLAM3两种主流视觉SLAM算法在无人机避障中的表现。测试聚焦于光照变化、动态遮挡和快速运动三大挑战,提供了详细的实测数据与性能分析。结果表明,VINS在计算效率和实时性上占优,而ORBSLAM3在定位精度和地图管理方面更稳健,为不同应用场景下的工程选型提供了清晰依据。

醉三国 627

C++ Builder 6 进行 SOAP 开发(2) -- 通过 SOAP 传递自定义类型数据

C++ Builder 6 BizSnap/SOAP/WebService(2) -- 通过 SOAP 传递自定义类型数据    本文将做一个略复杂的例子,实现通过 SOAP 传递自定义的数据类型。本例子的功能是在服务端通过 dbExpress 的数据访问控件取得数据表内容,然后将其通过 SOAP 传递到客户端再显示。    服务端: 1.New|WebSe

猛禽的编程艺术 5059

思科9117AP从零配置EWC模式实战:Wi-Fi6网络搭建避坑指南

本文详细介绍了思科9117AP在Wi-Fi6网络环境下配置EWC模式的实战指南,涵盖镜像准备、网络环境配置、模式转换步骤及高级运维技巧。通过EWC模式,企业可实现控制器与AP的一体化部署,显著降低成本和简化运维,特别适合中小企业Wi-Fi6网络搭建。

weixin_28318011的博客 333

C++实现服务器发送图片

C++实现服务器发送图片 这里是一个简单的图片服务器,每次向这个服务器发送请求后,都会得到一个图片。 特点: 负责发送图片的函数,接收的是string类型的值 重点: 在获取string图片的char*数据时,不能使用c_str(),应该使用data() 原因是 c_str()在获取char*类型的数据时,会将\0第一次出现的位置作为字符串结束的位置,而data()则会返回整个字符串中...

Learning 7636

使用兮克 2.5G 交换机将北京联通 EPON 改为 ODI 猫棒接入

最近入手了兮克2.5G交换机(兮克SKS1200-8GPY1XF),有 8 个 2.5G 电口和 1 个 10G SFP+ 光口;支持多种组网模式,其中一种是支持使用猫棒接入,由路由器拨号后再回接到交换机,这样就可以替换掉光猫了。

啦啦啦啦 la 1万+

【图像拼接】源码精读:Parallax-Tolerant Unsupervised Deep Image Stitching(UDIS++)

注:Pytorch代码。【图像拼接论文精读】专栏对应文章【图像拼接】论文精读:Parallax-Tolerant Unsupervised Deep Image Stitching(UDIS++)配合对应的文章阅读,效果更佳!注:请重点关注代码段中的注释!!!有一些讲解的东西直接写在代码段的注释中了,同时多关注红色字体和绿色字体!!!我认为深度学习方法和传统方法有很多相似之处。比如:深度学习中的损失函数和传统方法中的对齐项、失真项等其实原理相同,只是求解方式不同。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 7274

C++ 服务器通过Tcp传输图片 到 QT客户端显示

C++ 服务器通过Tcp传输图片 到 QT客户端显示 简单的方法通过流数据传输图片,并且在QT上面显示出来这里贴出核心代码,供大家参考: 客户端C++: #include<iostream> #include<winsock.h> #include <fstream> #include<string> #pragma comment(lib,"ws2_32.lib") using namespace std; void initialization(); i

BrightMZM的博客 3781

高级电机控制场景实例:基于Simulink的永磁同步电机基于Luenberger观测器的弱磁控制仿真

本文基于Simulink实现表贴式永磁同步电机(SPMSM)的Luenberger观测器弱磁控制仿真,通过构建“观测-弱磁-控制”协同逻辑,突破传统矢量控制的基速限制。利用线性化模型设计观测器实时估计电流与磁链,结合电压极限约束动态注入负d轴电流,实现转速扩展至12000rpm(4倍基速),弱磁区电流THD低于3%,动态响应时间小于5ms,验证了高速运行下系统稳定性与鲁棒性。附完整建模步骤、MATLAB函数代码及性能分析,适用于电动汽车、机床等高速驱动场景,为高级电机控制提供可复现的技术范式。

amy_mhd的博客 32

QT tcp服务器及客户端 传输图片及显示

上一节里我们使用TCP服务器和客户端相互发送字符串信息,本节间学习图片的传输及显示。 一、服务器端 程序开始进行监听,一旦发现有连接请求就发出newConnection()信号,然后我们便接受连接,可以接收数据。 步骤1.新建QtGui应用 名称为tcpServer,基类选择QWidget,类名为Widget,完成后打开tcpReceiver.pro添加一行代码:QT += network 。 步骤2.我们更改widget.ui文件,设计界面如下。 其中“服务器端”Label的objectN..

delphi863的博客 7800

HFSS实战项目——微带带通滤波器设计

本文详细介绍并设计了一款微带带通滤波器,通过HFSS三位电磁仿真软件对其进行仿真设计及优化,仿真结果表明,本文设计的滤波器表现出优良的滤波性能,符合设计要求。

2401_87464239的博客 5393

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

dell笔记本外接显示器_舒适护眼16:10黄金比例明基BL2581T 企业复工更需专业的笔记本外接显示器...

没有一个春天不会到来!目前全国大部分地区已有序复工,千千万万的劳动人民重新回到工作岗位,只为更美好的明天而奋斗!复工潮的到来,办公族许多工作都堆在了复工的时刻来完成,越来越多的办公族面对各类繁琐的工作任务,尤其是需要处理复杂office表格制作的诉求,此时倘若能配置一台优质针对专业办公的显示器装备,效率回归应该不在话下。此次评测,笔者特别为天天坐在电脑前工作的人们带来了一款的商务护眼显示器,他就是...

weixin_33335559的博客 672

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C语言实现gsoap输出数据类型到XML的方法

soap_out_TYPE,soap_put_TYPE soap中输出数据都有两个函数soap_out_TYPE,soap_put_TYPE     两个的区别是put只能输出一次,只能在一个函数中调用一次,out则可以调用多次,根据id的不同实现多个输出 实际上put的实现也是调用了out来实现的! SOAP_FMAC3 int SOAP_FMAC4 soap_put_int(s

jk110333的专栏 6643

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Soap1.1协议请求数据格式分析

一、使用TCP/IP Monitor 监控SOAP网络请求 使用TCP/IP Monitor可以监视tcp/ip协议的报文内容,由于http是基于Tcp的应用协议,而webservice是基于http实现,所以通过tcp/ip monitor可以监视webservice请求及响应的内容。 案例:使用Eclipse的TCP/IP Monitor监控Soap协议网络请求 讲解代理服务器 步骤 1. 点...

鸭梨山大山大的博客 1832

socket网络编程(二)——实现持续发送

在《》一文里我们提到了,客户端发送了数据了之后,不管服务端还是客户端都close退出了,也就是说只能发送一次数据,这显然不符合实际的用途。那么该如何更改程序呢? 要想实现持续发送,聪明的你可能想到了用循环,思路完全正确,但是循环多少次呢?实际的使用情况服务端一直都要运行,除非系统崩掉了,而客户端和服务端的长连接也要一直连着,除非客户端自己关闭了连接。所以我们的思路是双端都无限循环!所以可以用一个while(1)来循环,那么应该在哪里开始循环,这个要看自己具体的要求,如果要求三次握手只一次,随后发送数据的话进

一点 3106

3、布尔类型和引用

1、C++中的布尔类型 — C++在C语言的基本类型系统之上增加了bool — C++中的bool可取的值只有true和false — 理论上bool只占一个字节 注意: true代表真值,编译器内部用1来表示 false代表非真值,编译器内部用0来表示 2、布尔类型的值 bool类型只有true(非0)和false(0)两个值 C++编译器会将非0值转换成true,0值转换成false 下面的...

xiebs的博客 1426

c++builder 2006 SOAP/WebService 第一个hello word!服务端

服务端:  New|WebServices|Soap Server Application  选 Web App Debugger executeable 类型, CoClass Name 为:wadSoapDemo1 确定后将自动提示是否要新建一个接口,如下图,确定即可打开新建接口向导,如果要以后再增加接口,可以在 New|WebServices 中选择 SOAP Se

破空的专栏 3984

BCB通过WSDL Importer调用WebServers接口

BCB访问WebServers接口   1.      打开编译器  File->new->Others-> 2.       3.      选择WebServers选项 4.      双击 WSDL Importer选项 5.       6.      输入链接这里输入腾讯QQ状态查询链接http://www.webxml.com.cn/webservices/qqOnlin

cddchina的专栏 5141

C++ Builder 6 进行 SOAP 开发(1) -- 一个 Hello world! 的例子

 C++ Builder 6 BizSnap/SOAP/WebService(1) -- 一个 Hello world! 的例子    作为 Delphi 的兄弟, C++ Builder 在很多方面都跟 Delphi 是如出一辙,在 SOAP/WebService 方面当然也是大同小异了。关于用 Delphi 进行 SOAP/WebService 应用开发

猛禽的编程艺术 1万+
上一篇: 猛禽--C++ Builder 6 进行 SOAP 开发(1) -- 一个 Hello world! 的例子
下一篇: 三层开发我的一家之言
lvjack
博客等级 码龄26年 20粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值