问题标签 [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.

0 投票
1 回答
1287 浏览

c# - COM 异常:“SerializationException:输入流不是有效的二进制格式。起始内容...”

我有一个在某些 C# 代码中引用的 COM 程序集(我们称之为 com1.dll)。当我添加参考时,我在参考节点下看到一个 Interop.com1.dll。如果我从 Visual Studio 执行应用程序,以下代码将运行良好。

然后我运行我的构建脚本,执行以下 nAnt:

当我执行从构建脚本生成的程序集时,它会在var customer = new com1.Customer();代码行上出错,并带有以下堆栈跟踪:

我的问题是有人知道为什么吗?

0 投票
0 回答
1226 浏览

.net - 简单设置中的“类型库导入器无法转换成员的签名”警告

观察这个最简单的 IDL 文件:

这是我的编译方式:

注意 TlbImp 警告。生成的互操作程序集是:

属性的存在ComConversionLoss让我感觉很糟糕,所以我的问题是如何摆脱这个警告?

PS 我的问题可能与什么原因导致“类型库导入器无法转换成员的签名”警告完全相同?. 但是,事实并非如此,因为我在命令行上编译并且警告不会在任何地方消失。

0 投票
2 回答
2464 浏览

.net - 使用嵌入式互操作类型时的警告

我最近将我的一个 C# 解决方案从 VS2008 更新到 vs 2010 以利用嵌入式互操作类型功能,这样我就可以停止交付我们目前由于与旧版 VB6 代码库交互而必须使用的互操作库。

出于某种原因,我在编译解决方案时收到以下消息:

类型库导入器遇到了一个不是从 IUnknown 派生的接口:'_HiddenInterface'

我已经四处搜索,到目前为止,我能找到的唯一两条信息是“忽略它不会造成任何伤害”和“这意味着 VB6 代码违反了一些规则”。由于 VB 代码库是我们的,最好在编译时出现 0 个警告,我想纠正导致这些警告的任何原因。

我很茫然,所以任何建议都会很棒。

0 投票
1 回答
1822 浏览

.net - tlbimp.exe 可以生成具有自定义版本信息的互操作程序集吗?

Microsoft 类型库导入器工具( tlbimp.exe) 生成互操作程序集,但没有某些版本信息,即没有公司、没有版权、没有商标,并且版本号始终设置为 1.0.0.0。是否可以获得该工具来生成具有自定义版本信息的互操作程序集?

这与我在 SO 上提出的另一个问题松散相关:Modify the version info of a built .Net assembly

0 投票
1 回答
287 浏览

.net - tlbimp:早期绑定如何与“/noclassmembers”一起工作?

我正在玩tlbimp,我找到了这个/noclassmembers选项,我就像:

啊哈!我打赌这将打破早期绑定!

但是,令我懊恼的是,即使使用使用此选项生成的互操作程序集,一切似乎仍然正常。也就是说,在替换这个新的互操作程序集时,没有编译问题(或我的测试机器上明显的运行时问题)。

那么,究竟做了什么/noclassmembers,为什么希望总是使用这个选项呢?

考虑以下:

  1. 显然有时需要“避免 TypeLoadError 异常”,并且
  2. 生成的互操作程序集更小(在我的情况下它只有 3/4 大小)

(从文件大小来看,Visual Studio 自动生成的互操作程序集没有使用该选项。)

谢谢。

0 投票
2 回答
199 浏览

.net - Windows 安装程序可以根据外部应用程序的版本部署程序集吗?

我正在 Visual Studio 2010 / .NET 4 中开发一个小程序(一个 dll),它通过 COM 互操作与外部应用程序(我们称之为 ExApp)集成。我自己使用 生成互操作程序集TlbImp.exe,因为外部应用程序没有提供任何程序集。ExApp 提供三个流行版本,每个版本都有一个实际上相同的 API,但每个版本都有不同(且不兼容)生成的互操作 dll。目前,这意味着我有三个独立的安装程序:

  • 带有my.dll内置/链接到Interop.ExApp.dllv1的安装程序
  • 带有my.dll内置/链接到Interop.ExApp.dllv2的安装程序
  • 带有my.dll内置/链接到Interop.ExApp.dllv3的安装程序

一定有比这更好的解决方案。

如何配置 Visual Studio / Windows Installer 以便我只需要一个安装 .exe?这意味着安装程序会检测 ExApp 的版本,并安装相应版本的my.dllInterop.ExApp.dll

还有一个额外的问题:由于 ExApp API 没有发生有意义的变化,我如何编译一个版本my.dll来使用任何已安装的 ExApp 版本?

0 投票
1 回答
472 浏览

.net - Tlbimp .net 和 COM 组件仍然需要注册

我使用了一个 COM DLL 并使用 tlbimp 创建了一个可以在我的 .net 3.5 项目中使用的 DLL。我在尝试使用 COM 接口时遇到错误,我想知道是否仍需要在将安装应用程序的服务器上注册 COM dll?如果是这样,我应该注册哪个 DLL,使用 tlpimp 创建的还是使用 tlpimp 的原始 DLL?

0 投票
1 回答
372 浏览

c# - 如何将一个 COM 类实例作为参数传递给 C# 中的另一个 COM 方法?

我使用TlbImp.exe. 一个有一个包装器描述为的类

该对象必须作为参数传递

然后我这样调用方法:

我认为正在传递的对象不是正确的。我觉得TlbImp.exe可以链接那些 DLL 并使用GNOTDRSignatureServer而不是UnmanagedType.IUnknown,或者我可以使用System.Runtime.InteropServices.Marshal.GetComInterfaceForObject

我的代码有什么问题?

0 投票
3 回答
313 浏览

.net - 为什么 TlbImp 不能将此用于 DIA 的 COM 接口正确导入 .NET?

我尝试导入 Microsoft 的 DIA SDK 以用于 .NET:

这似乎在大多数情况下都可以正常工作,只是由于某种原因,它不包含某些接口(例如IDiaEnumFrameData),而包含其余接口则很好。

(该接口既不存在于 .DLL 文件中,也不存在于 .TLB 文件中——即使它存在于 C 和头文件中。)

这是什么原因造成的?

0 投票
3 回答
4040 浏览

java - com4j 包装器生成问题

我正在尝试使用 tlbimp-20110320.jar 为 com4j 生成包装器。我还尝试了具有相同错误的 2008 版本。即使我尝试针对 tut 中的示例运行,我也会遇到相同的错误。

在 Iceman 提供了所需库的链接后,我能够让它运行一点。但是,我必须将 arg4j 内容复制到 tlbimp jar 中,并将 com4j 内容也复制到 tlbimp jar 中。现在我明白了