问题标签 [typelib]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
957 浏览

dll - Oleview错误“错误加载类型库”?

类型库声明应用程序或动态链接库 (DLL) 公开的类、接口、常量和过程。类型库通常是程序文件中的资源;它也可以是扩展名为 .tlb 或 .olb 的独立二进制文件。

那么是否有可能某些 DLL 仍然公开接口而不被声明为 TypeLib。

实际上我正在尝试从 oleview 打开一个 dll 并显示错误消息“错误加载类型库”。

根据我的理解,如果我们有从 DLL 暴露的接口,那么它应该由 oleview 打开,否则它不能有暴露的接口或函数。

我们有 dll 暴露接口但仍然无法被 Oleview 查看的任何可能性。

0 投票
1 回答
2396 浏览

c# - 为什么这个 C# 类库项目无法创建兼容 COM 的 DLL?

我已经下载了一个名为TreeViewAdv的 C# 类库,我需要在另一个项目中将其用作 COM DLL。

它构建成功(发布,而不是调试)。

  • 使用“regasm”注册构建的 DLL 说“类型注册成功”
  • 使用“gacutil”注册说“程序集成功添加到缓存”

在 C# 项目设置中:

  • 应用程序 > 装配信息 >使装配 COM-Visible被选中
  • 构建 >注册 COM 互操作已选中

但是,当我尝试通过“选择工具箱项目”对话框将此构建的 DLL 添加到 VS 时,它显示“XYZ.tlb 的自我注册失败”。

还有什么我必须配置的吗?为什么我不能在 VS 中使用这个 DLL?

0 投票
3 回答
21131 浏览

c++ - 使用 tlb 文件的 COM 自动化

将我视为 Windows 环境和 COM 编程的新手。

我必须自动化应用程序(CANoe)访问。CANoe 将自己暴露为 COM 服务器并提供 CANoe.h 、 CANoe_i.c 和 CANoe.tlb 文件。任何人都可以指定如何编写 C++ 客户端,以访问应用程序的对象和功能。

另外,请指定如何从 C++ 访问 tlb 文件中的代码。

0 投票
2 回答
2486 浏览

c++ - 在 COM 自动化中 #import tlb 文件时出现编译错误

我正在尝试在 VC++ 项目中#include 一个应用程序 tlb 文件。

在我的项目源文件中 #import "CANoe.tlb" 之后出现以下编译错误。-

  • 未知字符'0x1'
  • 语法错误:缺少 ';' 在标识符“A”之前
  • 缺少类型说明符
  • int 假定。注意:C++ 不支持默认整数
  • '{' : 缺少函数头(旧式正式列表?)

请提出建议,如果我做错了。

此外,有没有办法验证 .tlb 文件内容并解决这些错误。是否可以在 tlb 文件中进行更正?如果是这样,我如何创建更新的 tlb

提前致谢

0 投票
2 回答
255 浏览

delphi - 第三方 COM DLL 的新版本 - 如何在 Delphi 中安装和保留旧版本?

我需要让我的 Delphi 程序使用新版本的第三方 DLL。我希望能够使用新版本,但如果需要,可以恢复到旧版本。

一些对象是应用程序中表单上的不可见对象。其他我在运行时实例化。

如何在维护现有版本的同时将新版本的 DLL 安装到 Delphi 中?我正在使用德尔福 2007。

0 投票
2 回答
6423 浏览

c++ - 如何在 C++ 中以编程方式导入 tlb 文件?

目前我正在使用以下语句:

但我以编程方式获取文件夹路径。IE,"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727"

我必须test.tlb从驻留在变量中的这条路径加载,说folderpath。我必须通过连接以编程方式导入 tlb folderpath+test.tlb。我怎样才能做到这一点?

0 投票
2 回答
576 浏览

c# - 互操作程序集中的名称大写错误

我有一个带有类型库的 VC++ COM 组件。该组件的类型库声明了一个接口和一个协同类:

为了使用来自 C# 应用程序的组件,我添加了对 C# 项目的引用并生成了一个互操作程序集。

在 Visual Studio 2003 的对象浏览器中,我看到互操作包含:

很明显,由于某种原因,类的名称和接口的大小写不同。这不会发生在同一类型库中声明的其他 20 多个接口 - 因为它们ISomething对应于Somethingand SomethingClass

我查看了项目的 .idl 文件 - 标识符Workflow未在其他任何地方使用。

这种奇怪行为的原因是什么?如何解决?

0 投票
2 回答
273 浏览

.net - 任何听说过 Accessibility_TLB 的人

我一直在努力将我的一个程序集转换为可以通过 Delphi 使用。我能够将程序集转换为 PAS 文件并在我的 delphi 应用程序中调用该方法。但是我遇到了一个问题,我的 PAS 文件要求我能够找到并添加 System_Windows_Forms_TLB。但是那个文件使用了 Accessibility_TLB,我不知道那在哪里?有谁知道那在哪里或者我在这里做错了什么?抱歉,我完全没有处理 COM 的经验。

0 投票
3 回答
1654 浏览

.net - COM 互操作 (CCW) 中的重载 - IDispatch 名称包括后缀(_2、_3 等)

我有一个包含几个类的托管程序集,这些类具有重载方法。我通过以下方式将程序集公开给 COM/IDispatch 调用者

..并在程序集本身上设置正确的 Guid。我没有为 COM 互操作定义显式接口。这一切都是动态完成的。我regasm.exe /codebase在托管 DLL 上运行,它为 COM 互操作注册它。

当我运行 OleView 时,我可以看到程序集中各个类的 ProgId。但是,浏览这些 ProgId 并展开 IDispatch 节点,这些类没有 TypeLib 信息。

即使这样,我也可以从脚本调用接受零参数的方法或接受一个参数的方法。如果还有一个接受多个参数的重载,我不能按名称调用该方法。我一直得到的错误是

由此我了解到 COM/IDispatch 客户端无法正确解析通过 COM 互操作公开的对象上的重载方法。


然后我加了

...到每个有问题的班级。在regasm.exeDLL 之后,我可以在 IDispatch 节点下看到每个方法的类型库信息。

我发现重载的方法会自动获得一个包含附加后缀的名称。MethodX 将在自动生成的 typelib 程序集中公开重载为 MethodX、MethodX_2、MethodX_3 等。

而且我发现通过引用带有这些后缀的方法名称,我可以调用重载方法,尽管不是使用通用名称。

更有趣的是,如果我随后[ClassInterface(ClassInterfaceType.AutoDual)]从类中删除 ,我仍然可以以这种方式调用重载方法,从而避免 Wrong number of arguments or invalid property assignment错误。

我的问题是:这种行为 - 将数字后缀附加到成员名称 - 稳定吗?记录在案?可信?

0 投票
1 回答
330 浏览

delphi - 是否可以向类型库添加额外的 GUID?

我有一个描述一些接口的类型库。由于其中一些接口用作类别,因此我想将类别 ID 添加到类型库中。所以问题是:

a) 如何在 Delphi (2007 及更高版本) 中做到这一点?

或作为替代

b) 是否可以且建议将接口 GUID 用于 CATID?