问题标签 [tlbimp]
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.
c# - 使用 tlbimp 而不需要第二次组装?
我正在尝试在我的 C# dll 中实现一个 COM 接口供其他人使用。我在 foo.idl 中定义了一个接口。
我已经通过 tlbimp 运行 foo.idl 来生成 foo.dll,一个 .Net 程序集。现在要实现我的接口,我可以在我的 dll 中引用 foo.dll 来实现接口。
这完美地工作,因为它有一个例外:我现在必须分发两个 dll 而不是一个。这实际上违背了我正在处理的项目的要求:交付一个 DLL。
有没有办法将 tlbimp dll 合并到我的中,或者任何其他方式来做到这一点(在没有第二个 dll 的 C# 中实现 COM 接口)?
c# - 将 TLB(和 tlbimp.exe)与 C# 一起使用的缺点
我们正在将一家通信公司的软件集成到我们自己的软件中,用于接听电话、转接电话、与客户匹配号码等。
他们为我们提供了 API 文档,其中包括一个 TLB 文件。我们已经使用 tlbimp 工具创建了一个程序集,我们现在想在我们的实现中使用它。
由 tlbimp 创建的一些类已被赋予内部构造函数,使它们无法实例化。我认为在这种情况下应该没问题,因为另一个类应该返回这些类的实例。
这让我想到:在使用 tlbimp.exe 和整个 TLB 时,我还应该注意哪些其他陷阱?手动创建 DllImport/ComImport/PInvoke 代码会更好吗?
c# - 为什么 tlbimp 会将接口转换为 coclass?
实际上,在大多数情况下tlbimp 会将接口转换为 coclass 的一个功能。具体来说,如果在 IDL 我有
然后 tlbimp 将看到这First
是唯一要实现的类IFirst
,因此它创建了一个 .NET 接口,其中interface IFirst
替换为class First
这在某种程度上可能是有帮助的。
这怎么可能有用?我的意思是无论如何class First
都会有相同的方法interface IFirst
,所以它不会添加任何东西,所以如果没有这种转换,我可以interface IFirst
到处传递并获得完全相同的效果。这个转换有什么用?
c++ - 通过 .net 互操作类调试 COM C++ 代码
是否可以通过 tlbimp.exe 从 C++ 程序创建的 .net 互操作层进入正在使用的 COM C++ 代码。我看到 COM C++ dll 的符号已加载到 Debug->Modules 窗口中。
visual-studio-2010 - tlbimp 做了哪些 Visual Studio IDE 不做的事情?
我有一个用未管理的 C++ 编写的 COM DLL,并使用 VS 2010 编译。我可以使用 regsvr32 注册 DLL,并且可以通过 VBscript 调用它。
当我尝试添加对它的引用时,在创建 C# 客户端时,我没有看到添加引用 -> COM 选项卡中列出的 COM 对象。如果我手动浏览到 DLL 并尝试选择它,它会说 DLL 不是有效的 assmlby 或 COM 组件。
现在,我可以使用 tlbimp 工具生成一个互操作 DLL,并使用它作为对我的 C# 客户端的引用。一切正常。
我的问题是:
- 为什么通过 regsvr32 注册的原始 COM 未在添加引用对话框的 COM 选项卡中列出?
- 当我可以从 VBScript 和 C++ 本机代码调用它时,为什么 VS IDE 认为它不是一个有效的 COM?
- tlbimp 到底做了哪些 IDE 不能做的事情?
- 我需要进一步阅读什么来提高我对类型库和互操作性的理解?
c# - 如何在 C# 中创建对象?
我想将以下 VB6 代码翻译成 C#
我使用 TlbImp.exe 为 COM 类创建包装器,我尝试了:
但是没有接受host
参数的构造函数
c# - 在 C# .net 4.0 中运行时加载 TLB
我有一个来自第三方库的 tlb 文件。这个库有很多版本,但是我在 tlb 中使用的函数是不变的,即不会从一个版本更改为下一个版本。
我已将 tlb 文件作为 COM 参考添加到项目中。我可以成功构建和调用第三方库中的函数。
当我部署我的应用程序时,我不能保证用户将在他们的 PC 上安装与我相同的第三方版本。当出现这种情况时,一旦调用第三方库中的函数,他们就会收到访问冲突错误 (0xc0000005)。
如何在运行时加载位于用户 PC 上的 tlb 文件?
tlbimp - 防止 TlbImp 为引用的类型库生成互操作程序集
我正在使用TlbImp
. 我的几个类型库引用了一个单一的核心类型库。
当我TlbImp
对抗时,First.dll
我得到Interop.First.dll
and Interop.Core.dll
。问题是当我再次运行它时,反对Second.dll
,TlbImp
尝试Interop.Core.dll
再次生成,导致错误:
如何告诉TlbImp
不要为引用的程序集生成互操作?
c# - 如何在 Windows 7 上使用 TLBIMP 包装器引用和访问专有 COM 组件
我使用 TLBIMP.EXE 创建了一个商业闭源程序的包装器。(该程序不能直接被 Visual Studio 引用,虽然它可以在 VB6 中引用。)VS 引用包装器就好了,并且能够创建一个对象。但是,一旦我在对象上调用方法,它就会崩溃并出现以下错误:
{“无法将“InfoWorksLib.InfoWorksClass”类型的 COM 对象转换为接口类型“InfoWorksLib.IIW”。此操作失败,因为对具有 IID 的接口的 COM 组件调用 QueryInterface '{61305DAA-3868-41AD-956D-081010E80E8B }' 由于以下错误而失败:不支持此类接口(HRESULT 异常:0x80004002 (E_NOINTERFACE))。”}
我的代码如下所示:
我已经尝试了声明和创建的所有可能组合(例如InfoWorks iw = new InfoWorksClass()
,等)
VS 中的对象资源管理器显示以下内容:
这是在 Windows 7 上。在 Windows XP 虚拟机上,相同的代码可以正常工作。
Windows 7 上是否存在任何可能导致上述异常的安全问题?包装程序集是否需要位于非系统目录中?
c# - 在 Visual Studio 中添加 VB6 引用会给出“类型库导入器在类型验证期间遇到错误”
我正在将一个用 VB6 编写的相当大的项目转换为 C#。鉴于正在迁移的项目的规模,它将在 18 个月的过程中分阶段完成。我在将 VB6 ActiveX dll 的引用添加到 .Net 项目时遇到了问题。
如果您完全按照这些步骤操作,您也应该能够重现问题。
我在 .Net 中编写了一个 COM 可见的接口:
通过在项目属性的 Compile 选项卡中选择“Register for COM interop”,您将获得一个 TLB 文件。
我创建了一个引用此 TLB 的 VB6 项目和一个实现公开接口的类。
如果我在 VB6 中将项目属性的“组件”选项卡设置为使用“远程服务器文件”,则编译时会自动创建 TLB。我可以在 OleView 中查看 TLB 并看到以下内容(除了在 .Net 项目中定义的接口在 VB6 中完成的具体实现的详细信息):
现在,我创建了一个全新的 .Net 项目。如果我添加对 VB6 dll 的引用,则会收到以下错误:
无法解析 COM 引用“ ef005573-bfc7-436d-a382-f906ca09f94a ”版本 3.0。类型库导入器在类型验证期间遇到错误。尝试在没有类成员的情况下导入。
但是,如果我启动 Visual Studio 命令提示符并运行以下命令:
然后我可以将该 dll 作为参考添加到我的 .Net 解决方案中,它工作得非常好。
我的问题。当我直接添加引用时,tlbimp 在命令行上做了什么而没有完成?当 Visual Studio 中的消息显示“尝试在没有类成员的情况下导入”时,我该如何在 Visual Studio 中执行此操作?我知道如何在 tlbimp 中做到这一点。
我为文字墙道歉,但我想尽可能地描述情况,保留我认为相关的信息。