aardio 文档

ODL 语法指南

在 aardio 中一般不需要改动 *.odl 类型库声明文件。 保持默认就可以,所有接口函数可用 com.activeX 自动导出。

如果要自定义类型库,建议继承 aardio.idl 提供的 IDispeatchExecutable 接口。 所有 DISPID 不应大于 10000 (aardio 自动生成 DISPID 以 10000 为起始值递增)。

所有 aardio 表对象、函数对象都实现了 IDispatch 接口, 表对象可在 DISPID_NEWENUM 调用时返回 IEnumVARIANT 枚举接口。

一、定义类型库(library)

1.1 语法

[attributes]
library 类型库名 { 
    importlib("库名");
    [attributes]
    interface/interface_name : IDispatch { 
        函数定义;
    };
};

1.2 语法元素说明

1.3 备注

1.4 示例

import "aardio.idl";

[
uuid(27A24EA2-F236-4FE4-A918-44AAB7A8DC5C),
version(1.0)
]
library aardioTestControl {

    importlib("stdole32.tlb");    

    [ uuid(EC32DF0E-0947-4DF1-827D-7073D376995D),control ]
    coclass Sample {

        //默认接口
        [default] dispinterface IDispatchExecutable;

        //默认事件源接口
        [default,source] dispinterface IDispatchExecutableEvent;
    }; 
};

二、定义自动化接口(dispinterface)

2.1 语法

[attributes]
dispinterface 接口名 { 
    函数列表 
};

2.2 语法元素说明

2.3 函数定义

[attributes] returntype [calling convention] funcname(params);

2.4 备注

2.5 示例

    [ uuid(1C8736BC-8C0C-4DB6-9FAD-1C6A0CDF1FA2) ]
    dispinterface  IDispatchSample{ 
        properties:
        methods:  
            [ id(10) ]
            void Test( [in] BSTR str,[in,out] VARIANT *out1,[in,out] VARIANT *out2);
    } 

三、定义接口(interface)

2.1 语法

[attributes]
interface 接口名 [: 父接口名] { 
    函数列表 
};

2.2 语法元素说明

2.3 函数定义

[attributes] returntype [calling convention] funcname(params);

2.4 备注

2.5 示例

[uuid(BFB73347-822A-1068-8849-00DD011087E8), version(1.0)]
interface Hello : IUnknown { 
    void HelloProc([in, string] unsigned char* pszString); 
    void Shutdown(void); 
};

[dual]
interface IMyInt : IDispatch { 
    [propget] HRESULT MyMessage([in, lcid] LCID lcid, [out, retval] BSTR* pbstrRetVal); 
    [propput] HRESULT MyMessage([in] BSTR rhs, [in, lcid] DWORD lcid);
    HRESULT SayMessage([in] long NumTimes, [in, lcid] DWORD lcid, [out, retval] BSTR* pbstrRetVal); 
}

四、定义组件类(coclass)

3.1 语法

[attributes]
coclass 类名 { 
    [attributes2] [interface | dispinterface] 接口名; 
};

3.2 语法元素说明

3.3 备注

3.4 示例

[uuid(BFB73347-822A-1068-8849-00DD011087E8), version(1.0), helpstring("A class"), helpcontext(2481), appobject]
coclass myapp {
    [source] interface IMydocfuncs; 
    dispinterface DMydocfuncs; 
};

[uuid(00000000-0000-0000-0000-123456789019)]
coclass foo {
    [restricted] interface bar;
    interface bar;
}

此文档精简了 ODL 语法的关键要素,便于快速入门和掌握基本写法。

Markdown 格式