IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [转]ActiveX .idl与.odl的区别

    testcs_dn发表于 2016-01-20 11:22:30
    love 0
    .odl和.idl在com中的功能相同. 
    前者是ActiveX中的 后者是ATL中. 

    可在前者的文件中 用 #import "XXXXX.idl" 的方式包含后者. 反过来没有试过. 
    2.
    When using IDL, you must declare the interfaces that will generate the C++ source files outside of the library declaration. For the ODL, this step is not necessary. Other than a few minor language differences, the IDL and ODL are identical in terms of syntax and organization. 
    3.
    ODL是Microsoft对IDL的扩展
    4.
    odl ---对象描述语言 
    idl ---接口描述语言 
    其实是一个功能就是在写法上有些不同,eg: 
    odl: 
    [ 
    uuid(3C591B20-1F13-101B-B826-00DD01103DE1), // LIBID_Lines. 
    helpstring("Lines 1.0 Type Library"), 
    lcid(0x09), 
    version(1.0) 
    ] 
    library Lines 
    { 
    importlib("stdole.tlb"); 

    [ 
    uuid(3C591B25-1F13-101B-B826-00DD01103DE1), // IID_Ipoint. 
    helpstring("Point object."), 
    oleautomation, 
    dual 
    ] 
    interface IPoint : IDispatch 
    { 
    [propget, helpstring("Returns and sets x coordinate.")] 
    HRESULT x([out, retval] int* retval); 
    [propput, helpstring("Returns and sets x coordinate.")] 
    HRESULT x([in] int Value); 

    [propget, helpstring("Returns and sets y coordinate.")] 
    HRESULT y([out, retval] int* retval); 
    [propput, helpstring("Returns and sets y coordinate.")] 
    HRESULT y([in] int Value); 
    } 
    [ 
    uuid(3C591B21-1F13-101B-B826-00DD01103DE1), // CLSID_Lines. 
    helpstring("Lines Class"), 
    appobject 
    ] 
    coclass Lines 
    { 
    [default] interface IPoint; 
    interface IDispatch; 
    } 
    } 
    idl: 

    [ 
    uuid(3C591B25-1F13-101B-B826-00DD01103DE1), // IID_Ipoint. 
    helpstring("Point object."), 
    oleautomation, 
    dual 
    ] 
    interface IPoint : IDispatch 
    { 
    [propget, helpstring("Returns and sets x coordinate.")] 
    HRESULT x([out, retval] int* retval); 
    [propput, helpstring("Returns and sets x coordinate.")] 
    HRESULT x([in] int Value); 

    [propget, helpstring("Returns and sets y coordinate.")] 
    HRESULT y([out, retval] int* retval); 
    [propput, helpstring("Returns and sets y coordinate.")] 
    HRESULT y([in] int Value); 
    } 
    [ 
    uuid(3C591B20-1F13-101B-B826-00DD01103DE1), // LIBID_Lines. 
    helpstring("Lines 1.0 Type Library"), 
    lcid(0x09), 
    version(1.0) 
    ] 
    library Lines 
    { 
    importlib("stdole32.tlb"); 
    importlib("stdole2.tlb"); 

    [ 
    uuid(3C591B21-1F13-101B-B826-00DD01103DE1), // CLSID_Lines. 
    helpstring("Lines Class"), 
    appobject 
    ] 
    coclass Lines 
    { 
    [default] interface IPoint; 
    interface IDispatch; 
    } 
    }


沪ICP备19023445号-2号
友情链接