热搜:
下载MakeTLB tlb类型库编译器mktyplib.exe

MakeTLB tlb类型库编译器mktyplib.exe

更多
  • 软件大小:403.00KB (412,672 字节)
  • 软件类别:编程书集 -> 编程辅助
  • 软件授权:免费软件      软件语言:简体中文
  • 更新时间:2020/09/17
  • 软件厂商:
  • 软件官网:
  • 应用平台:
标签
软件介绍
热度:0

将编写好的ODL文件往MKTYPLIB.EXE上一拖即可。它是个 tlb库文件文件生成工具,从VC中提取了出来,使用时解压就可以用了,然后直接把 odl 文件拖到mktyplib.exe上即可生成 tlb 文件了。

定义library(类型库)

下面的表达式描述一个类型库.这个描述包括一个MIDL输入文件(ODL)包含的所有信息.

[attributes]library类型库的名字{输入库,数据类型,模块,接口,调度接口和COM类等相关的要暴露的信息的描述.};

1.1、语法元素说明:[attributes]在一个library表达式前面接受helpstring,helpcontext,lcid,restricted,hidden,control,uuid和version属性.其中uuid属性是必须的.想了解这些属性的详细信息,可参考下一章.属性放在中括号中.1.2、备注library表达式必须出现在任何类型定义之前1.3、例子

[uuid(F37C8060-4AD5-101B-B826-00DD01103DE1),//LIBID_Hello.helpstring("Hello2.0TypeLibrary"),lcid(0x0409),version(2.0)]libraryHello{importlib("stdole.tlb");[uuid(F37C8062-4AD5-101B-B826-00DD01103DE1),//IID_Ihello.helpstring("ApplicationobjectfortheHelloapplication."),oleautomation,dual]interfaceIHello:IDispatch{[propget,helpstring("Returnstheapplicationoftheobject.")]HRESULTApplication([in,lcid]longlocaleID,[out,retval]IHello**retval)}}

定义接口(interface)

这个表达式定义一个接口,接口就是一个函数定义的集合.一个接口可以继承于任何基接口.

[attributes]interface接口的名字[:父接口的名字]{functionlist};

2.1、语法元素说明:[attributes]在一个interface表达式前面接受dual,helpstring,helpcontext,hidden,odl,oleautomation,uuid和version属性.其中odl,uuid属性是必须的.如果这个接口是一个COM对象的接口,source,default和restricted也被接受.想了解这些属性的详细信息,可参考下一章.functionlist接口中每个函数的函数原形的列表.在这个函数列表中可以出现任意数量的函数定义.在函数列表中的函数定义使用下面的形式:[attributes]returntype[callingconvention]funcname(params);接口里一个函数定义中可以接受下面的属性:helpstring,helpcontext,string,propget,propput,propputref,bindable,defaultbind,displaybind和vararg.如果vararg被指定,最后一个参数必须是VARIANT类型的安全数组.可选的调用惯例可以是_pascal/_pascal/pascal,_cdecl/_cdecl/cdecl或者__stdcall/_stdcall/stdcall.调用协定参数列表是一个用逗号分隔的列表,向下面这样:[attributes]typeparamname类型可以是任何先前已经定义的类型,内置类型,指向任何类型的指针,指向内置类型的指针等.参数的属性有in,out,optional和string.如果使用了optional,它必须指定最右边的参数,而且参数的类型必须是VARIANT.2.2、备注因为用interface描述的函数存在于VTBL,DispInvoke与CreateStdDispatch可以用于提供一个IDispatch::Invoke的实现.因为这个原因,在描述一个对象的属性或方法时interface的使用比dispinterface更普遍.在interface里描述一个函数,与在一个module表达式里描述是基本致的,除了entry属性不允许使用.接口里的成员可能会产生异常,所以应该返回HRESULT值,而且应该为真实返回值指定一个返回参数.返回参数总是列表中最后一个参数.2.3、例子下面的例子定义了一个名字为Hello的接口,有两个成员函数,HelloProc和Shutdown:

[uuid(BFB73347-822A-1068-8849-00DD011087E8),version(1.0)]interfacehello:IUnknown{voidHelloProc([in,string]unsignedchar*pszString);voidShutdown(void);};

接下来的例子定义了一个名为IMyInt的双重接口,它有一对为MyMessage属性定义的访问函数,还有一个返回一个字符串的函数.

[dual]interfaceIMyInt:IDispatch{//Apropertythatisastring.[propget]HRESULTMyMessage([in,lcid]LCIDlcid,[out,retval]BSTR*pbstrRetVal);[propput]HRESULTMyMessage([in]BSTRrhs,[in,lcid]DWORDlcid);//Amethodreturningastring.HRESULTSayMessage([in]longNumTimes,[in,lcid]DWORDlcid,[out,retval]BSTR*pbstrRetVal);}

这个接口的成员返回错误信息,而且函数通过HRESULT值与返回参数各自地返回值.访问成员的工具可以返回HRESULT到他们的用户,可简单的暴露返回参数返回值,显式地处理HRESULT值.双重接口必须从IDispatch继承

定义coclass

这个表达式描述一个组件对象模型(COM)的全球统一标识符和它支持的接口.

[attributes]coclassclassname{[attributes2][interface|dispinterface]interfacename;};

3.1、语法元素说明:[attributes]在coclass表达式中,uuid属性是必须的.这个uuid与在系统注册表中注册组件的CLSID是相同的.在本表达式的前面还接受helpstring,helpcontext,version,licensed,control,hidden与appobject属性,但不是必须的.想了解这些属性更多的细节,请看下一章.appobject属性使coclass的函数和属性在整个类型库内有效.classname在类型库中标识普通对象的名字.attributes2interface或dispinterface的可选属性.source,default与restricted属性可以被接受.interfacename用interface或dispinterface声明的接口.3.2、备注组件对象模型定义一个类作为一个实现,允许QueryInterface在接口集之间查询.

3.3、示例

[uuid(BFB73347-822A-1068-8849-00DD011087E8),version(1.0),helpstring("Aclass"),helpcontext(2481),appobject]coclassmyapp{[source]interfaceIMydocfuncs;dispinterfaceDMydocfuncs;};[uuid00000000-0000-0000-0000-123456789019]coclassfoo{[restricted]interfacebar;interfacebar;}

软件截图

  • MakeTLB tlb类型库编译器mktyplib.exe第1张

下载地址

MakeTLB tlb类型库编译器mktyplib.exe