Com 什么是stdole2.tlb

Com 什么是stdole2.tlb,com,atl,midl,Com,Atl,Midl,tlb包含所有基类型定义,如果我们使用MIDL,每个库都必须导入它。但当我创建ATL DLL项目时,lib文件看起来是这样的 import "oaidl.idl"; import "ocidl.idl"; [ uuid(4CA3ADAD-AE53-4D80-AF26-176BAF8223B1), version(1.0), ] library FirstATLLib { importlib("stdole2.tlb"); }; 我无法用谷歌搜索stdole2.tlb中

tlb包含所有基类型定义,如果我们使用MIDL,每个库都必须导入它。但当我创建ATL DLL项目时,lib文件看起来是这样的

import "oaidl.idl";
import "ocidl.idl";

[
    uuid(4CA3ADAD-AE53-4D80-AF26-176BAF8223B1),
    version(1.0),
]
library FirstATLLib
{
    importlib("stdole2.tlb");
};

我无法用谷歌搜索stdole2.tlb中的内容?它是否包含stdole32.tlb?还有什么?有人能帮我弄清楚吗

您可以使用Windows SDK
COM/OLE对象查看器
打开类型库并查看其中的内容:


它定义了您可以在类型库中使用的某些接口和类型,因为您可以通过引用stdole2.tlb使它们可用。tlb
stdole2.tlb
是stdole32.tlb的更新版本。这从使用OleView导出的IDL中可以明显看出:

从stdole2.tlb

// typelib filename: stdole2.tlb

[
  uuid(00020430-0000-0000-C000-000000000046),
  version(2.0),
  helpstring("OLE Automation")
]
library stdole
{
...
// typelib filename: stdole32.tlb

[
  uuid(00020430-0000-0000-C000-000000000046),
  version(1.0),
  helpstring("OLE Automation")
]
library stdole
{
...
从stdole32.tlb开始:

// typelib filename: stdole2.tlb

[
  uuid(00020430-0000-0000-C000-000000000046),
  version(2.0),
  helpstring("OLE Automation")
]
library stdole
{
...
// typelib filename: stdole32.tlb

[
  uuid(00020430-0000-0000-C000-000000000046),
  version(1.0),
  helpstring("OLE Automation")
]
library stdole
{
...
通过观察它们都具有相同的
uuid
,但
stdole2
具有更高的
version
属性,可以证实这一点

此外,如果您比较这两个IDL,您可以看到较新的IDL与第一个IDL有什么不同。主要是它为一些接口添加了一些属性,还添加了一些新的typedef、接口等(此处添加太长,不需要回答问题)


奇怪的是,与DLL不同,它没有包含版本或其他信息的文件属性(Windows资源管理器中“属性”视图的“详细信息”选项卡)。

当我尝试打开stdole2时,它会显示“文件扩展名不正确”。t您可能做错了什么,但别担心-我确实打开了它,并为您附加了一个屏幕截图。是的,我使用了错误的菜单项。奇怪的是,当我试图打开stdole32.tlb时,它仍然会打开stdole2.tlb