三层中如何在服务器与客户端之间传输自定义的'Record'类型数据的例子

 

博主自写的三层中如何在服务器与客户端之间传输自定义的'Record'类型数据的例子。

效果图如下:

点击在新窗口中浏览此图片

例子源码下载:http://Delphi盒子上还未审核。现在已审核!下载地址为:http://sd.2ccc.com/downloads/simples/database/xieyunc_RDMRecordDemo.rar

csdn已审核了:http://download1.csdn.net/down3/20070320/20145824710.rar

关键代码:

/*================================================ 单元名称:Comm 单元功能:定义了一个记录类型TARec,这一文件Server和Client中都要引用 作者:小宇飞刀(http://xieyunc.blog.163.com/) 修改日期:2007-03-20 13:56:39 ================================================*/ unit Comm; interface uses SysUtils,Variants; type TARec=Record //自定义的记录类型 Name:ShortString; Age:ShortInt; end; function RecordToVariant(value:TARec):OleVariant; //有问题,好象只能传递第一个成员的值 function VariantToRecord(value:OleVariant):TARec; //有问题 function RecordToVariant2(aRec:TARec):OleVariant;//Writed by 小宇飞刀(xieyunc) function VariantToRecord2(vData:OleVariant):TARec;//Writed by 小宇飞刀(xieyunc) implementation // TARec ---> Variant function RecordToVariant(value:TARec):OleVariant; var P:Pointer; ii:Integer; begin ii := sizeof(TARec); Result := VarArrayCreate([0,ii],varByte); P := VarArrayLock(Result); Move(value,P^,sizeof(P)); VarArrayUnlock(Result); end; // OleVariant ----> TARec function VariantToRecord(value:OleVariant):TARec; var P:Pointer; ii:Integer; begin ii := sizeof(TARec); P:= VarArrayLock(value); Move(P^,Result,ii); VarArrayUnlock(value); end; function RecordToVariant2(aRec:TARec):OleVariant;//Writed by 小宇飞刀(xieyunc) begin Result:=VarArrayCreate([0,1],VarVariant); Result[0] := aRec.Name; Result[1] := aRec.Age; end; function VariantToRecord2(vData:OleVariant):TARec;//Writed by 小宇飞刀(xieyunc) begin if VarIsArray(vData) then begin Result.Name := vData[0]; Result.Age := vData[1]; end; end; end.

转载于:https://www.cnblogs.com/xieyunc/archive/2009/04/27/2793738.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Apollo ,可以使用 protobuf 进行自定义数据类型的定义,并使用 RecordWriter 将数据写入 Record 。以下是一个简单的示例: 1. 定义 protobuf 文件 假设我们要定义一个自定义数据类型,包含一个字符串和一个整数。首先,我们需要在一个 .proto 文件定义这个数据类型: ``` syntax = "proto3"; package my_package; message MyCustomType { string str = 1; int32 num = 2; } ``` 2. 编译 protobuf 文件 我们需要使用 protoc 编译器将 .proto 文件编译成 C++ 代码。假设我们的 .proto 文件名为 my_custom_type.proto,我们可以使用以下命令进行编译: ``` protoc --cpp_out=. my_custom_type.proto ``` 这将生成一个名为 my_custom_type.pb.h 的头文件和一个名为 my_custom_type.pb.cc 的源文件。 3. 写入 Record 现在我们可以在 C++ 代码使用 MyCustomType 类型,并将它们写入 Record 。以下是一个示例: ```c++ #include <iostream> #include <fstream> #include "cyber/cyber.h" #include "my_package/my_custom_type.pb.h" using apollo::cyber::RecordWriter; using my_package::MyCustomType; int main() { // 初始化 Cyber apollo::cyber::Init("writer"); // 创建 RecordWriter RecordWriter writer("./record_test.rec"); // 创建 MyCustomType 对象 MyCustomType custom_type; custom_type.set_str("hello"); custom_type.set_num(123); // 将 MyCustomType 对象写入 Record writer.WriteChannel("channel_name", &custom_type); // 关闭 RecordWriter writer.Close(); return 0; } ``` 这个示例创建了一个 MyCustomType 对象,并将它写入一个名为 channel_name 的 channel 。然后,它关闭了 RecordWriter。 注意,在使用 RecordWriter 之前,我们需要初始化 Cyber。此外,我们还需要在 CMakeLists.txt 文件添加以下行: ``` add_subdirectory(my_package) ``` 这样可以将编译后的 my_custom_type.pb.h 和 my_custom_type.pb.cc 文件添加到项目。 以上就是使用 Apollo 自定义数据类型并写入 Record 的基本方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值