TXSDateTime 类型数据赋值出现异常

yctg57358 2008-11-26 06:13:38
导入wsdl文件后生成如下文件
h文件
// ************************************************************************ //

#ifndef __wds9002ext_h__
#define __wds9002ext_h__

#include <System.hpp>
#include <InvokeRegistry.hpp>
#include <XSBuiltIns.hpp>
#include <SoapHTTPClient.hpp>


namespace NS_wds9002ext {

class RealDataItem;
class HisDataItem;

// ************************************************************************ //
// Namespace : urn:wds9002ext
// ************************************************************************ //
class RealDataItem : public TRemotable {
private:
int Fsend_id;
float Fv;
TXSDateTime* Ft;
public:
__fastcall ~RealDataItem();
__published:
__property int send_id = { read=Fsend_id, write=Fsend_id };
__property float v = { read=Fv, write=Fv };
__property TXSDateTime* t = { read=Ft, write=Ft };
};




// ************************************************************************ //
// Namespace : urn:wds9002ext
// ************************************************************************ //
class HisDataItem : public TRemotable {
private:
int Fsend_id;
float Fv;
TXSDateTime* Ft;
float Favg_v;
public:
__fastcall ~HisDataItem();
__published:
__property int send_id = { read=Fsend_id, write=Fsend_id };
__property float v = { read=Fv, write=Fv };
__property TXSDateTime* t = { read=Ft, write=Ft };
__property float avg_v = { read=Favg_v, write=Favg_v };
};


typedef DynamicArray<HisDataItem*> HisDataItems;
typedef DynamicArray<float> ArrayOf96Float;


// ************************************************************************ //
// Namespace : urn:wds9002ext
// ************************************************************************ //

typedef DynamicArray<BXFDataItem*> BXFDataItems;

// ************************************************************************ //
// Namespace : urn:wds9002ext
// transport : http://schemas.xmlsoap.org/soap/http
// style : document
// binding : wds9002ext
// service : wds9002ext
// port : wds9002ext
// URL : http://192.168.90.16:2556
// ************************************************************************ //
__interface INTERFACE_UUID("{648268D5-B889-F707-452C-B3A9A6A0EC22}") wds9002extPortType : public IInvokable
{
public:
virtual RealDataItem* getRealData(const int senid) = 0;
virtual HisDataItems getHisData(const int senid, const int type, const TXSDateTime* start_time, const TXSDateTime* end_time) = 0;

};
typedef DelphiInterface<wds9002extPortType> _di_wds9002extPortType;

_di_wds9002extPortType Getwds9002extPortType(bool useWSDL=false, AnsiString addr="");



#endif // __wds9002ext_h__

}; // wds9002ext

#if !defined(NO_IMPLICIT_NAMESPACE_USE)
using namespace NS_wds9002ext;
#endif
//-




///------CPP文件
#include <vcl.h>
#pragma hdrstop

#if !defined(__wds9002ext_h__)
#include "wds9002ext.h"
#endif



namespace NS_wds9002ext {

_di_wds9002extPortType Getwds9002extPortType(bool useWSDL, AnsiString addr)
{
static const char* defWSDL= "wds9002ext.wsdl";
static const char* defURL = "http://127.0.0.1:8991";
static const char* defSvc = "wds9002ext";
static const char* defPrt = "wds9002ext";
if (addr=="")
addr = useWSDL ? defWSDL : defURL;
THTTPRIO* rio = new THTTPRIO(0);
if (useWSDL) {
rio->WSDLLocation = addr;
rio->Service = defSvc;
rio->Port = defPrt;
} else {
rio->URL = addr;
}
_di_wds9002extPortType service;
rio->QueryInterface(service);
if (!service)
delete rio;
return service;
}


__fastcall RealDataItem::~RealDataItem()
{
delete Ft;
}

__fastcall HisDataItem::~HisDataItem()
{
delete Ft;
delete Fmin_t;
delete Fmax_t;
}

// ************************************************************************ //
// This routine registers the interfaces and types used by invoke the SOAP
// Service.
// ************************************************************************ //
static void RegTypes()
{
/* wds9002extPortType */
InvRegistry()->RegisterInterface(__interfaceTypeinfo(wds9002extPortType), L"urn:wds9002ext", L"UTF-8");
InvRegistry()->RegisterDefaultSOAPAction(__interfaceTypeinfo(wds9002extPortType), L"");
InvRegistry()->RegisterInvokeOptions(__interfaceTypeinfo(wds9002extPortType), ioDocument);
/* RealDataItem */
RemClassRegistry()->RegisterXSClass(__classid(RealDataItem), L"urn:wds9002ext", L"RealDataItem");
/* HisDataItem */
RemClassRegistry()->RegisterXSClass(__classid(HisDataItem), L"urn:wds9002ext", L"HisDataItem");
RemClassRegistry()->RegisterXSInfo(__arrayTypeinfo(HisDataItems), L"urn:wds9002ext", L"HisDataItems");
RemClassRegistry()->RegisterXSInfo(__arrayTypeinfo(ArrayOf96Float), L"urn:wds9002ext", L"ArrayOf96Float");
}
#pragma startup RegTypes 32

}; // wds9002ext

为什么调用getRealData时可以正常使用取到的TXSDateTime* 类型数据
但当给getHisData赋值时则不管使用AsDateTime还是Year等各分解时间赋值均抛出异常。
而用DateTimeToXSDateTime转换时取的时间均为1970-01-01
NS_wds9002ext::_di_wds9002extPortType wsdl_service;
NS_wds9002ext::RealDataItem *day_rain2;
TXSDateTime* AAA;
TXSDateTime* begin_1;
TXSDateTime* end_1;
day_rain2=wsdl_service->getRealData(111) ;
AAA= day_rain2->t;
//此时均正常
TDateTime dt_beg;
TDateTime dt_end;
dt_beg= StrToDateTime("2007-11-20 08:00:00");
dt_end= StrToDateTime("2007-11-21 08:00:00");
begin_1->AsDateTime=(dt_beg);end_1->AsDateTime =(dt_end); //使用此时编译通过,但运行到此抛出异常
begin_1=DateTimeToXSDateTime(dt_beg);end_1=DateTimeToXSDateTime(dt_end);//上句换作使用此时编译通过,运行getHisData时取时间均为1970-01-01
NS_wds9002ext::HisDataItems day_rain3;
day_rain3=wsdl_service->getHisData(6980109,1, begin_1,end_1);

即datetime类型直接赋值给TXSDateTime出现异常,将datetime类型转换成TXSDateTime不能成功。
如何给TXSDateTime赋值呢?




...全文
707 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yctg57358 2008-11-28
  • 打赏
  • 举报
回复
可能是C++builder 6.0导入wsdl文件时生成代码有问题,用C++builder 2009 生成wdsl文件的.h、.cpp置换C++builder 6.0的文件
问题解决!
在此谢谢yuanreid的热心帮助
yuanreid 2008-11-27
  • 打赏
  • 举报
回复
getHisData是你调用的WebService,我理解后两个参数都是输出参数,值是被修改了的。这个逻辑需要看WebService的业务实现。
yctg57358 2008-11-27
  • 打赏
  • 举报
回复
getHisData从oracle数据库取数据集合,对应的参数一个是数据ID(number类型),一个数据类型(number类型),一个是起始时间(date类型),一个是结束时间(date类型)
yctg57358 2008-11-27
  • 打赏
  • 举报
回复
webservice 服务器端是VC写的,vc和vb都能正常调用,bcb中相关CLASS中TXSDateTime*类型的公共变量可以调用,但TXSDateTime*作为函数参数时
值却无法传递。
迷茫了好几天,把相关的XSBuiltIns.hpp、XSBuiltIns.pas都看了好几遍均未发现问题。
是否C++builder 6.0对delphi的TXSDateTime*支持上有问题?
yuanreid 2008-11-26
  • 打赏
  • 举报
回复
getHisData不知道是什么,帮不了你了
yctg57358 2008-11-26
  • 打赏
  • 举报
回复
day_rain3=wsdl_service->getHisData(6980109,1, begin_1,end_1);

返回的所取参数时间仍为1970-01-01 08:00:00,而不是2007-11-20 08:00:00
返回的值仍为空,实在是找不出问题所在,将所有文件中的TXSDateTime*换成WideString依然是1970
yuanreid 2008-11-26
  • 打赏
  • 举报
回复
第二个问题,也测试通过:


TXSDateTime* AAA;
TXSDateTime* begin_1 = new TXSDateTime();
TXSDateTime* end_1 = new TXSDateTime();
//此时均正常
TDateTime dt_beg;
TDateTime dt_end;
dt_beg= StrToDateTime("2007-11-20 08:00:00");
dt_end= StrToDateTime("2007-11-21 08:00:00");
//begin_1->AsDateTime=(dt_beg);end_1->AsDateTime =(dt_end);
begin_1=DateTimeToXSDateTime(dt_beg);end_1=DateTimeToXSDateTime(dt_end);
Caption = FormatDateTime("YYYY-MM-DD HH:NN:SS",begin_1->AsDateTime);
yuanreid 2008-11-26
  • 打赏
  • 举报
回复
运行出错是因为你的指针没有new,以下代码,我测试通过:

TXSDateTime* AAA;
TXSDateTime* begin_1 = new TXSDateTime();
TXSDateTime* end_1 = new TXSDateTime();
TDateTime dt_beg;
TDateTime dt_end;
dt_beg= StrToDateTime("2007-11-20 08:00:00");
dt_end= StrToDateTime("2007-11-21 08:00:00");
begin_1->AsDateTime=(dt_beg);end_1->AsDateTime =(dt_end);
内容概要:本文研究了一种基于遗传算法的新型异构分布式系统任务调度算法,旨在解决异构计算环境中任务分配与调度的复杂优化问题。通过Matlab代码实现该算法,充分利用遗传算法强大的全局搜索能力和鲁棒性,对任务执行时间、资源利用率、系统负载均衡等关键性能指标进行综合优化,有效提升分布式系统的整体运行效率与稳定性。研究详细阐述了算法的整体架构设计、染色体编码策略、适应度函数构造、选择机制以及交叉与变异等遗传操作的实现细节,并通过大量仿真实验验证了所提出算法相较于传统调度方法在收敛速度、解的质量和调度性能方面的显著优越性。; 适合人群:具备一定编程基础和优化算法理论知识,从事分布式计算、高性能计算、云计算资源调度或智能优化算法研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于高性能计算、云计算、边缘计算等异构计算平台中的任务调度优化,提升资源利用效率;②为研究人员提供遗传算法在复杂组合优化问题中应用的完整实现案例,深化对智能优化算法设计原理与仿真实践的理解; 阅读建议:建议读者结合提供的Matlab代码深入研读,重点理解适应度函数的设计逻辑与遗传算子的参数调优策略,并可通过更换不同的任务集和系统模型来测试算法的泛化能力与鲁棒性。
参考李林凤等(2025)一文关于农村劳动力人均受教育年限指标的构建与计算方法,整理了中国31个省份总体、分性别的农村人均受教育年限数据,具体计算方法如下: 农村劳动力人均受教育年限 = (农村未上过学人数 × 1+小学学历人数 × 6+初中学历人数 × 9+高中和中专学历人数 ×12+大专及以上学历人数 × 16)/农村6岁及以上总人口 相关数据:各地区、分性别人均受教育年限数据 一、数据介绍 数据名称:中国各省农村人均受教育年限 数据范围:全国31个省份 时间范围:2006-2024年 样本数量:590条 数据来源:《中国人口和就业统计年鉴》、《中国劳动统计年鉴》 二、数据指标 年份 省份 省份代码 农村人均受教育年限 男性-农村人均受教育年限 女性-农村人均受教育年限 6岁及以上人口 6岁及以上人口_男 6岁及以上人口_女 未上过学人口 未上过学人口_男 未上过学人口_女 小学人口 小学人口_男 小学人口_女 初中人口 初中人口_男 初中人口_女 高中人口 高中人口_男 高中人口_女 大专及以上人口 大专及以上人口_男 大专及以上人口_女 三、参考文献 [1]李林凤,刘杨,杨亦民.种业创新驱动农村产业融合的作用机制与空间分异效应[J].广东财经大学学报,2025,40(6):97-109. [2]徐小阳,李洁,金丽馥.普惠金融对农村教育贫困的纾解效应[J].中国农村经济,2020,(9):41-64.
内容概要:本文围绕基于改进秃鹰算法的微电网群经济优化调度展开研究,提出了一种结合智能优化算法的调度模型,旨在实现微电网群运行过程中的成本最小化与能源利用效率最大化。研究详细阐述了改进秃鹰算法的原理与优化机制,将其应用于含分布式电源、储能系统及多元负荷的微电网群多目标经济调度问题中,充分考虑系统运行约束与能源交互特性,构建了完整的数学模型,并通过Matlab代码实现了算法仿真与结果验证。该资源不仅提供了核心算法代码,还整合了电力系统建模、智能优化、仿真分析等关键技术,形成一套完整的科研复现体系,有助于深入理解先进优化算法在现代能源系统中的实际应用。; 适合人群:具备电力系统基础、优化算法理论及Matlab编程能力的研究生、科研人员和工程技术人员,特别适用于从事微电网、综合能源系统、智能调度等领域研究的专业人士。; 使用场景及目标:①复现并验证改进秃鹰算法在微电网群经济调度中的有效性;②掌握智能优化算法在复杂电力系统调度问题中的建模与求解方法;③依托所提供的Matlab代码开展学术论文复现、科研项目开发或工程方案设计;④拓展应用于储能优化、电动汽车调度、多能协同等关联领域的创新研究。; 阅读建议:建议读者结合文本说明与Matlab代码同步实践,重点关注算法实现细节、模型构建逻辑与参数设置方法,通过仿真实验加深对优化过程的理解,并尝试将该方法迁移至其他类似优化问题中进行对比分析与创新改进。

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧