在看到COM深入的第四章进程内自动化服务器中见到的问题?var
  v:Valiant;
begin
  v:= createoleobject('UnitSrv.UnitAuto');var
  v:IUnitAutoDisp;
begin
  v:= CoUnitAuto.create  as IUnitAutoDisp;
----------------------------------------
以上两个调用出现'无效的被呼叫方'错误
以上为正确调用!!!!!!!WHY?????
----------------------------------------
Var
  v:IUnitAuto;
begin
  v:=CoUnitAuto.create;

解决方案 »

  1.   

    郁闷哦,两年前看到这,现在来回顾.晕~~落后了深感搞IT苦哦,两年不学习就是垃圾,找工作都不好找了.
    哪位兄弟有一些分布式的实际给我看看[email protected]
    还有三层数据库实际意义是什么?(用DELPHI控件来说明)
    我现在急想速成哦.
      

  2.   

    注册过的
    Var
      v:IUnitAuto;
    begin
      v:=CoUnitAuto.create;
    这个方法可以,其它两种不行.
    WHY????
      

  3.   

    CoUnitAuto里面其实是帮你做了类型转换,所以可以不用在做一次as操作了至于这个
    var
      v:Valiant;
    begin
      v:= createoleobject('UnitSrv.UnitAuto');
    我就觉得没错了
      

  4.   

    我现在发现注册前
      IAutoUnitConvert = interface(IDispatch)
        ['{6946A9E7-F82E-45F6-97DE-C47A46684374}']
        Function Convert(Val: Double; L1: SYSINT; L2: SYSINT):Double; safecall;
      end;
    一注册后就变成
      IAutoUnitConvert = interface(IDispatch)
        ['{6946A9E7-F82E-45F6-97DE-C47A46684374}']
        procedure Convert(Val: Double; L1: SYSINT; L2: SYSINT); safecall;
      end;
    类实现是
    type
      TAutoUnitConvert = class(TAutoObject, IAutoUnitConvert)
      protected
        Function Convert(Val: Double; L1, L2: SYSINT):Double; safecall;
    //这句自动加上去的->procedure IAutoUnitConvert.Convert = IAutoUnitConvert_Convert;
      end;类型库怎样让一个方法是函数而不是过程.