急,有关COM中的异常处理,safecall和stdcall,Idispatchsafecall必须应用于继承自IDispatch的接口的方法,这样Delphi可以使异常传递而不依赖于HResult我想在我的COM Object中使用safecall的方式,请问我应该如何去实现IDispatch中定义的方法?使用safecall的方式会有什么影响?我需要做的是一组互相关联的Class/Interface,参数和返回值中都会传递我所定义的Interface,Delphi的Help中说:all method parameter and result types must be automatable. (The automatable types are Byte, Currency, Real, Double, Real48, Integer, Single, Smallint, AnsiString, ShortString, TDateTime, Variant, OleVariant, and WordBool.),会有问题吗?另外,请问大家在使用Delphi作COM Object的时候会如何去规划异常?有没有一个合适的通用做法?不知道说清楚没有 :(

解决方案 »

  1.   

    一,我觉得没有什么太麻烦的,也许是没有理解到你的意思..
    STDCALL返回的东西我都会OLECHECK检查一下返回值的.二,干脆让COM组件支持自动化有什么不好呢?
    你写的COM继承于TAutoIntfObject或TAUTOOBJECT,也不会增加代码量.
    不会有什么影响.三,让接口在参数中传递也是常用的...
      

  2.   

    ……
    try
      ……
    except
      on E: Exception do
       raise Exception.Create('哇,有异常!请看:[' + E.Message  + '],请稍后重试。');
    end;
      

  3.   

    halfdream(哈欠) ,多谢关注明白了一点儿还不是很清楚safecall和stdcall到底区别在哪儿?
      

  4.   

    safecall和stdcall到底区别在哪儿?
      safecall=stdcall + HResult;我需要做的是一组互相关联的Class/Interface,参数和返回值中都会传递我所定义的Interface,Delphi的Help中说:all method parameter and result types must be automatable. (The automatable types are Byte, Currency, Real, Double, Real48, Integer, Single, Smallint, AnsiString, ShortString, TDateTime, Variant, OleVariant, and WordBool.),会有问题吗?
      作好对应的类型转换的话是不会有问题的