荣耀9拍照怎么样:使用RemObjects Hydra 异常问题解

来源:百度文库 编辑:偶看新闻 时间:2024/05/01 12:33:08

使用RemObjects Hydra 开发 RemObjects SDK Service 过程中的异常问题解

Delphi 2007-10-04 11:37:11 阅读195 评论0   字号: 订阅

最近在学习使用RemObject开发,经验不足,碰到很多问题,在此列出来:

对于如何使用RemObject Hydra创建RemObject SDK Service Plugin我这里就不多介绍了,具体可以看:

http://www.remobjects.com/devcenter/articles/?id={36786066-BBCB-437B-9B51-6951464A2D79}

创建方法类似

附:服务使用的 THYXXXServer,THYXXMessage 都是放在模块插件主程序那边,千万别放在插件里面,我就犯过这样的错误。呵呵。

在调试运行主程序后,调用:http://localhost:8099/soap 会发现异常:尚未调用 CoInitialize 错误,该错误需要在主工程单元(也就是Project单元)下面的Uses引用

uROCOMInit单元,如果出现没有 uROCOMInit.dcu,那么你可以把它添加到工程里面,该单元你可以在你安装RemObject SDK目录下的 RemObjects SDK for Delphi\Source\uROCOMInit.pas 找到;

如果出现什么 Cannot a TStringList Assign a TStringList 错误,则你需要带包编译工程。这样就可以。

还有,如果你喜欢把RemObjects SDK Service做成Plugin方式,那么记得在模块插件主程序上添加THYRODLReader组件,并把它与其他如Message的关系设置好。

如果你想在MEMO中显示接口信息,可以使用以下代码:

var

  lib : TRODLLibrary;

  i, x : integer;

  defaultintf : TRODLServiceInterface;

begin

  Memo.Lines.Clear;

  HYRODLReader1.ReadFullRODL(lib);

  try

    for i := 0 to (lib.ServiceCount-1) do begin

      Memo.Lines.Add(lib.Services[i].Info.Name);

      defaultintf := lib.Services[i].Items[0];

      for x := 0 to (defaultintf.Count-1) do

        Memo.Lines.Add('----> '+defaultintf.Items[x].Info.Name);

    end;

  finally

    lib.Free;

  end;

end;

 注:TRODLLibrary 在单元:uRODL 中

 

RemObject解决自动生成代码的想法.

  用过DELPHI写过多层框架的,可能能RemObject比较熟悉. RemObjects Service Builder 自动生成代码的同时,也给我们带来困扰. 每个类都要定义在intf文件里, 接口只有一个, 这些显然对我们开发系统来讲, 支持的不够, 我想使用多个接口,也不想没完没了的定义结构.

              前一段时间写了一个自动生成元数据的小工具,  可以和界面StringGrid和控件自动绑定,实现数据集的效果,而且在客户端完全放弃了数据集, 使用纯对象,  自己觉得还算不错. 然而在传输的时候, 我又想使用RemObject支持序列化的功能.  这个问题如何解决呢?

             后来我想摸索之后发现, 可以通过下面的方法来进行改进.

           1. RemObject的工程改为普通工程,  把定义的元数据分离出来, 在interface下面uses一下.

           2. 如果直接传递对象, 接口和代码怎么解决? (因为分离了元数据对象单元,所以编译的时候,不会生成代码. 解决问题的办法在于,RPCServerLibrary. Rodl文件. 正是因为这个文件,所以RemObjects Service Builder 自动生成代码根据其XML文件进行解析,最后生成代码.

   3. 方法定义的地方:






            4. 结构体定义的地方:

   










   有了上面的描述, 你应该想到怎么办了吧,对,就是在这里动手,前面我们不是自己做过动态生成元数据代码吗? 现在只要在其中修改这个RODL文件,把元数据和方法加进去, 然后编译的时候,RemObjects Service Builder 就会自动帮我们生成代码了.

   最后,我们把inter文件(自动生成)改一下.删除元数据的声明,建一个新的工程,把所有代码拷进去.呵呵,大功告成