大哥啊!真不知道怎么说呢?
看你的代码:
-----------------------
    on execption do 
    begin
      setAbort
      aa:=False; 
      Result:=True;
    end;
-----------------------
你把Result 放在了 except中,如果不出错的话,返回的绝对是False,
在try外面先放一个Result的默认值吧。

解决方案 »

  1.   

    luyang(爱心) :
    问题的根本原因不在这里.
    我是在try外面是放了一个, Result:=True,
    只是我在写贴子时写漏掉了.
      

  2.   

    原因在此:
    var aa:olevariant;
    begin
      Dcom1.Appserver.MySave(aa) then 
       showmessage('ok') else showmessage('Error');
    end;
    应该是
    var aa:olevariant;
    begin
      Dcom1.Appserver.MySave(aa) ;
      if aa then 
        showmessage('ok') else showmessage('Error');
    end;
      

  3.   

    差不多!!!
    我还到没试过out,我一般用in,和[in,out].
      

  4.   

    mshawk(憨憨) :
    你的办法我也试过根本不行.
    别外我的原始贴子少写了一个if
    正确的应该是:
    if Dcom1.Appserver.MySave(aa) then 
       showmessage('ok') else showmessage('Error');
    我之所以将 aa:olevariant 定义为 out 型的就是指望在 Result不能返回时用变量aa来判断,结果一样不行.
    请大家自已动手试一下好不好.
      

  5.   

    在COM体系中,任何函数的返回值都是HResult的。所以你的写法不对。像我写的那样有没有显示任何信息呢?你告诉我,我们再找原因。
      

  6.   

    mshawk(憨憨) :
    没有,你自已试一下.
      

  7.   

    mshawk(憨憨) 说错了.
        的确,在COM体系中,任何函数的返回值都是HResult的,但COM的返回值并不一定就是开发工具中的函数返回值.比如VB.注意函数中的safecall,这是Delphi对Automation Object的内置支持,它把你的返回值变成了一个[out,retval]类型的参数,把你执出的异常变成了HResult的返回值.而在调用时,它会把HResult的COM返回值变成异常,把[out,retval]类型的COM参数变为返回值提供给你.
        这个问题很奇怪,大家注意调用代码:
    if Dcom1.Appserver.MySave(aa) then 
       showmessage('ok') 
    else 
       showmessage('Error');
    不用考虑服务的实现,无论Dcom1.Appserver.MySave(aa) 返回什么,只可能有四种情况:
     True或转换为Boolean型变为True:显示ok
     False或转换为Boolean型变为False:显示Error
     无法转换为Boolean:出现数据类型转换异常,进入异常处理
     COM返回值<0,即产生了异常:进入异常处理
    怎么会没有任何反应呢?
      

  8.   

    其实用HResult和函数返回值都可以。
    实在想不出为什么不可以。