sta*_*ica 4 com winapi idl typelib midl
我正在努力寻找看似超级简单的东西:我想使用MIDL编译器.tlb从.idl文件生成类型库(文件).但是,我只是无法让MIDL生成一个.tlb文件.
这是我的Foo.idl:
import "unknwn.idl";
[object, uuid(400075B9-4BD6-45A5-B8B7-9DA0CF7B9B13)]
interface IFoo : IUnknown
{
HRESULT DoFoo([in] int arg, [out, retval] int *result);
}
Run Code Online (Sandbox Code Playgroud)
这是我调用MIDL编译器的方式:
midl Foo.idl /tlb Foo.tlb
Run Code Online (Sandbox Code Playgroud)
其中将以下输出写入控制台:
Microsoft (R) 32b/64b MIDL Compiler Version 7.00.0555
Copyright (c) Microsoft Corporation. All rights reserved.
Processing .\Foo.idl
Foo.idl
Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\unknwn.idl
unknwn.idl
Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\wtypes.idl
wtypes.idl
Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\basetsd.h
basetsd.h
Processing C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\guiddef.h
guiddef.h
Run Code Online (Sandbox Code Playgroud)
MIDL编译器生成三个文件:Foo.h,Foo_i.c,Foo_p.c...但没有Foo.tlb.我误解了什么,或者这里出了什么问题?
.idl文件library{}在生成类型库之前需要一个块.在此块中,您需要声明库中需要存在的类型.普通库只coclass在库部分中有定义,midl会自动注入coclasses使用的任何接口.
只获取界面需要将其移动到库块中:
[
uuid(34DC0E7C-37C1-41C1-B3FD-1755A0396308),
version(1.0),
]
library MyLibrary
{
importlib("stdole2.tlb");
[object, uuid(400075B9-4BD6-45A5-B8B7-9DA0CF7B9B13)]
interface IFoo : IUnknown {
HRESULT DoFoo([in] long arg, [out, retval] long *result);
};
};
Run Code Online (Sandbox Code Playgroud)
使用您自己的uuid,版本号和库的名称.该importlib巫术确保了IUnknown和GUID的定义没有得到嵌入类型库也是如此.
| 归档时间: |
|
| 查看次数: |
3640 次 |
| 最近记录: |