问题标签 [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 投票
3 回答
1721 浏览

com - 将两个 .IDL 文件或两个 .tlb 文件合并为一个文件

我有 2 个 .net dll,我使用 REGASM 向 COM 公开。为了简化 COM 客户端中的引用,我想将它们合并到一个文件中。

我尝试将这两个文件都转换为 IDL,然后将其中一个文件的库部分的内容复制到另一个文件中,然后使用 MIDL 编译回 .tlb。这适用于第二个 IDL 中的 TypeDef,但是当涉及到我复制的接口时,它似乎失败了。OLE/COM 查看器可以看到接口定义,但是当我尝试通过 COM 使用 TLB 时,它找不到接口我复制进去了。

在我花太多时间在这之前,我想确保实际上可以通过这种方式来减少 IDL。

0 投票
1 回答
2399 浏览

delphi - Delphi 错误 E1026 找不到文件:“myprojectname.tlb”

我有一个项目,我们称之为 Yellow.dproj,我将其保存为 Blue.dproj,以进行一些更改。这个项目中肯定有一些COM/DCOM相关的代码,但是我不知道在哪里。

我在尝试构建 Yellow.dproj 时遇到的错误是它找不到类型库 (TLB) 文件:“E1026 File not found:”。它找不到的文件是 MyAppName.tlb。有一个 MyAppName_tlb.pas 文件,我尝试在项目中添加和删除该文件,无论哪种方式我都会收到此错误。

我想我可能必须进入那个我不太了解的 TLB 文件,并在其中重命名一堆垃圾,因为它取决于我的应用程序的名称。我怀疑,当您在 Delphi (Delphi 2010) 中使用 COM/DCOM 和类型库时,会发生这种情况。您不能只是重命名或另存为并再次构建新项目。

我该怎么做才能修复这个单元?

0 投票
2 回答
1590 浏览

c++ - 为什么visual studio会忽略项目文件中指定的tlb文件名

我正在将 Visual C++ 6 项目升级到 Visual Studio 2010,并且我一直在替换将文件复制到公共位置的后编译步骤,并将输出文件直接放在最终位置。但是,对于正在生成的 *.tlb 文件,有一个选项(在项目属性 -> MIDL -> 输出中)来指定文件名。当我把完整路径放在那里时,它在命令行中看起来很合理(说 /tlb "full\path\to\filename.tlb")。但是,当它实际编译时,文件并没有放在正确的位置,根据日志执行的命令是 /tlb ".\filename.tlb")。我犹豫是否将路径指定为输出目录,因为这样它也会将 XXX_i.c 和 XXX.h 文件输出到该位置,这不是我想要的。

有什么方法可以让 Visual Studio 尊重我实际放入选项中的设置,而不是做它想做的事情?

0 投票
1 回答
2894 浏览

visual-studio-2008 - 在 Windows 7(64 位)上注册的 tlb 文件不可用

我有一个(VS 2008)C# 项目需要使用第 3 方 COM 对象。为此,有人告诉我,我需要注册 COM 对象的 tlb 文件。所以我愿意

这给了我

但是我无法在 C# 项目中添加对它的引用,因为类型库在“添加引用”对话框的 COM 选项卡上不可用。果然,注册表搜索blahblah是空的。

有人知道我接下来应该戳什么吗?

0 投票
1 回答
1208 浏览

c#-4.0 - COM 问题 800A01AD 仅在服务器上

我有一个 .NET 库,我试图通过 COM(hMailServer 的 VBScript 脚本)使用它。我在我的本地开发盒(Windows 7 x64)上完成了所有工作。但是,在将 DLL 复制到我的服务器(Windows Server 2008 x64)后,当 VBScript 运行时,我不断收到以下错误:

错误:800A01AD - 描述:ActiveX 组件无法创建对象:'hMailServerPlugins.EventHandlers' - 行:2 列:1 - 代码:(null)"

我给程序集起了一个好听的名字。我将程序集放在与 hMailServer 相同的目录中,并使用它进行了注册

regasm hMailServerPlugins.dll /codebase /tlb:hMailServer.tlb

参考资料也出现在程序集中!我什至尝试将 hMailServer 服务更改为使用管理员用户凭据启动,以确保这不是安全问题。

有任何想法吗?

0 投票
4 回答
8698 浏览

.net - 错误:程序集“c:\MyAssembly.dll”无法转换为类型库

我正在尝试构建我的项目,但当项目构建并勾选“注册 COM 互操作”属性时,我突然开始收到以下错误。

程序集“c:\MyAssembly.dll”无法转换为类型库。类型库导出器在处理“SomeType,MyAssembly”时遇到错误。错误:在托管组件中定义了引用的类型,该组件是从无法加载的类型库中导入的(类型:'OtherType';组件:'c:\OtherAssembly.dll')。

团队中没有其他人得到这个错误,只有我!显然我对我的机器做了一些奇怪的事情,但是完全删除/删除和重新添加我能想到的所有东西的蛮力方法没有任何区别,所以我不得不真正理解这个错误(多么拖累!)

所以:

  • 这个错误实际上是什么意思
  • 接下来我应该在哪里寻找关于问题的更多/更具体的诊断信息?
0 投票
2 回答
3334 浏览

c# - Calling an old OLE component from C#

I have a very old (VC++ 5.0) proprietary DLL which I need to use from C# (Visual Studio 2010). The example specifies that to access this component I need to call CreateDispatch("application") which indicates towards OLE.

The following is the example code (C++):

I added a Reference through Visual Studio to the TLB file I have, and I can import its namespace successfully, but IComponentServer does not have any method called CreateDispatch.

What is the right approach to create the instance of an OLE component through C#?

0 投票
1 回答
732 浏览

.net - 如何使 .NET 不使用已注册的 TLB 来编组对 COM 方法的调用?

目前的配置是:

  1. 主应用程序是非托管的。
  2. 它包含DLL,包含TLB,描述函数,暴露给COM模型。
  3. 为了支持 ASMX Web 服务,它加载 .NET 框架,并启动为 Web 服务调用提供服务的 ASP.NET 域。
  4. 为了提供 Web 服务调用,它需要来自主应用程序的数据。因此,我们从 TLB 生成 Interop 程序集(使用 tlbimp.exe),Web 服务程序集使用此 Interop 与主应用程序中的 COM 对象进行通信。

一切正常,直到我们遇到版本问题。当同一台计算机上安装了 2 个版本的应用程序(包含 2 个版本的 TLB)时,两个版本的 TLB(例如,2.0 和 2.1)都已注册,并且较低版本停止工作。ProcessMonitor 显示,当尝试调用 2.0 版实例的 Web 服务时,它会在注册表中查找 TLB 的 GUID,读取所有带有版本号的子键,获取最后一个版本 (2.1) 并开始读取其内容。之后,它读取 2.1 版的 DLL,并且无法在自己的进程内进行 COM 调用 - 据我所知,由于编组问题。

如何制作不需要存在 TLB(至少存在已注册 TLB)的互操作来进行进程内 COM 调用?

提前致谢。

0 投票
1 回答
936 浏览

delphi - 是否可以让 Delphi 为导入的 OLE/COM 类型库自动生成事件支持代码?

我正在尝试_TLB为 Outlook 2003、2007 和 2010(以及其他 OLE 服务器)生成导入单元,类似于为 Outlook 2000 和 2002 与 Delphi 捆绑的那些。但是,我无法让类型库导入器也生成用于从捆绑单元中找到的 OLE 服务器捕获事件的代码。“生成组件包装器”选项仅为可直接实例化的服务器创建包装器,但不适用于仅通过其他对象的方法返回的对象,如TInspector,TExplorer等。

我当然可以自己创建事件处理代码,但这将是非常乏味的工作。

有谁知道是否tlibimp.exe可以调整 Delphi 2010 ( ) 中包含的导入程序以生成该代码?我真的怀疑在 Borland手动创建现有Outlook2000.pas和单元的那一天......OutlookXP.pas

是否有其他工具可以做到这一点?

0 投票
1 回答
1786 浏览

c# - Delphi下使用C# DLL作为COM

我们得到了一个由 C# 程序员编写的 DLL,编译为可用作 COM 对象。

我们咨询这些开发人员来获取函数名称和语法,我们在 regasm 注册后就可以使用它。

这没关系,但我们有更多的问题来产生更快的开发(关于更改),有些事情是无法理解或不起作用的。

我们使用了 Delphi 6 专业版和 C# Visual Studio 2008 制作的程序集(我认为)。

让我们看看它们:

1.) 我无法使用 C# 代码的 typelib (TLB),因为我无法导入 Delphi。

结果是:

可能的错误来源:

a.) Delphi 6 无法导入新的 COM dll-s。

b.) 我们必须强制 C# 生成格式较旧的 TLB。

我们尝试使用 regasm 重新生成 TLB,但我们也收到此错误。

可能这是不可能的,但是如果发生 b.) 情况,我们需要对 C# 开发人员说什么 - 如何编译 DLL-s?

(Delphi 无法导入 DLL,因为它们没有 self init 部分)。

2.)有趣:所有参数都正确转换为变体,反之亦然,但如果 C# 方法没有参数,我在 Delphi 端出现错误......例如(伪):

调用 A 在 Delphi 端产生错误。

调用 A(False) 工作正常。

我不知道,为什么我们得到这个。你对此有什么看法?这是 C# 编译问题吗?

感谢您的帮助:dd