gpt4 book ai didi

visual-c++ - 哪个类型库托管 stdDataFormat?

转载 作者:行者123 更新时间:2023-12-04 14:01:57 26 4
gpt4 key购买 nike

我正在尝试导入 VB6 的 VBRUN将库键入 Visual C++ 2017 头文件,但由于缺少依赖项而失败。

Visual C++ 报告

"error C4772: #import referenced a type from a missing type library;'missing_type' used as a placeholder"

使用 OLE View 查看文件显示问题出在 DataFormat属性(property)(DataFormat([out, retval] --<GetRefTypeInfo failed>** Return)) .

缺少的依赖项似乎是 stdDataFormat : 哪个类型库做stdDataFormat居住在,为什么它不见了? (我的操作系统是 Windows 10 Enterprise,21H1。)我在安装 Visual Studio 6 时是否错过了选择?

最佳答案

这解决了问题的第一部分,即如何找到包含给定接口(interface)或类的类型库 (TLB)。


假设您对托管给定 COM 接口(interface)或类的 TLB/DLL 没有先入之见,您可以通过几个注册表搜索找到它,假设所讨论的类型实际上已经注册。

我从 HKEY_CLASSES_ROOT 开始搜索数据值 = stdDataFormat。这导致:

[HKEY_CLASSES_ROOT\MSSTDFMT.StdDataFormat]
@="StdDataFormat Object"

[HKEY_CLASSES_ROOT\MSSTDFMT.StdDataFormat\CLSID]
@="{6D835690-900B-11D0-9484-00A0C91110ED}"

现在有了 6D835690-900B-11D0-9484-00A0C91110ED 的 CLSID GUID,搜索该值,发现:

HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{6D835690-900B-11D0-9484-00A0C91110ED

其中对我们而言重要的子元素是:

[HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{6D835690-900B-11D0-9484-00A0C91110ED}\InprocServer32]
@="c:\\windows\\SysWow64\\msstdfmt.dll"
...

InprocServer32 值是我想要查找的主要内容;它告诉您 DLL - 这是 c:\windows\SysWow64\msstdfmt.dll(在我的电脑上 - 但这应该是典型的)。

在 OLEView(或 OLEViewDotNet)中打开 msstdfmt.dll 确认了这一点;该 DLL 中来自 TLB 的反编译 IDL 包含:

[
uuid(6D835690-900B-11D0-9484-00A0C91110ED),
helpstring("StdDataFormat Object"),
helpcontext(0x00066b5f)
]
coclass StdDataFormat {
[default] interface IStdDataFormatDisp;
[default, source] dispinterface IStdDataFormatEvents;
};

所以 msstdfmt.dll 应该是缺少的依赖项。

如果您一开始就怀疑是这个 DLL,那么将它加载到 OLEView 中并进行检查显然要快得多。但在许多情况下,刚开始时这并不明显。


至于问题的第二部分 - 为什么缺少此依赖项 - 如果您添加代码的相关部分/包含可能会有所帮助?

关于visual-c++ - 哪个类型库托管 stdDataFormat?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69728992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com