问题标签 [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# - COM 异常:“SerializationException:输入流不是有效的二进制格式。起始内容...”
我有一个在某些 C# 代码中引用的 COM 程序集(我们称之为 com1.dll)。当我添加参考时,我在参考节点下看到一个 Interop.com1.dll。如果我从 Visual Studio 执行应用程序,以下代码将运行良好。
然后我运行我的构建脚本,执行以下 nAnt:
和
当我执行从构建脚本生成的程序集时,它会在var customer = new com1.Customer();
代码行上出错,并带有以下堆栈跟踪:
我的问题是有人知道为什么吗?
.net - 简单设置中的“类型库导入器无法转换成员的签名”警告
观察这个最简单的 IDL 文件:
这是我的编译方式:
注意 TlbImp 警告。生成的互操作程序集是:
属性的存在ComConversionLoss
让我感觉很糟糕,所以我的问题是如何摆脱这个警告?
PS 我的问题可能与什么原因导致“类型库导入器无法转换成员的签名”警告完全相同?. 但是,事实并非如此,因为我在命令行上编译并且警告不会在任何地方消失。
.net - 使用嵌入式互操作类型时的警告
我最近将我的一个 C# 解决方案从 VS2008 更新到 vs 2010 以利用嵌入式互操作类型功能,这样我就可以停止交付我们目前由于与旧版 VB6 代码库交互而必须使用的互操作库。
出于某种原因,我在编译解决方案时收到以下消息:
类型库导入器遇到了一个不是从 IUnknown 派生的接口:'_HiddenInterface'
我已经四处搜索,到目前为止,我能找到的唯一两条信息是“忽略它不会造成任何伤害”和“这意味着 VB6 代码违反了一些规则”。由于 VB 代码库是我们的,最好在编译时出现 0 个警告,我想纠正导致这些警告的任何原因。
我很茫然,所以任何建议都会很棒。
.net - tlbimp.exe 可以生成具有自定义版本信息的互操作程序集吗?
Microsoft 类型库导入器工具( tlbimp.exe) 生成互操作程序集,但没有某些版本信息,即没有公司、没有版权、没有商标,并且版本号始终设置为 1.0.0.0。是否可以获得该工具来生成具有自定义版本信息的互操作程序集?
这与我在 SO 上提出的另一个问题松散相关:Modify the version info of a built .Net assembly
.net - tlbimp:早期绑定如何与“/noclassmembers”一起工作?
我正在玩tlbimp,我找到了这个/noclassmembers
选项,我就像:
啊哈!我打赌这将打破早期绑定!
但是,令我懊恼的是,即使使用使用此选项生成的互操作程序集,一切似乎仍然正常。也就是说,在替换这个新的互操作程序集时,没有编译问题(或我的测试机器上明显的运行时问题)。
那么,究竟做了什么/noclassmembers
,为什么不希望总是使用这个选项呢?
考虑以下:
- 显然有时需要“避免 TypeLoadError 异常”,并且
- 生成的互操作程序集更小(在我的情况下它只有 3/4 大小)
(从文件大小来看,Visual Studio 自动生成的互操作程序集没有使用该选项。)
谢谢。
.net - Windows 安装程序可以根据外部应用程序的版本部署程序集吗?
我正在 Visual Studio 2010 / .NET 4 中开发一个小程序(一个 dll),它通过 COM 互操作与外部应用程序(我们称之为 ExApp)集成。我自己使用 生成互操作程序集TlbImp.exe
,因为外部应用程序没有提供任何程序集。ExApp 提供三个流行版本,每个版本都有一个实际上相同的 API,但每个版本都有不同(且不兼容)生成的互操作 dll。目前,这意味着我有三个独立的安装程序:
- 带有
my.dll
内置/链接到Interop.ExApp.dll
v1的安装程序 - 带有
my.dll
内置/链接到Interop.ExApp.dll
v2的安装程序 - 带有
my.dll
内置/链接到Interop.ExApp.dll
v3的安装程序
一定有比这更好的解决方案。
如何配置 Visual Studio / Windows Installer 以便我只需要一个安装 .exe?这意味着安装程序会检测 ExApp 的版本,并安装相应版本的my.dll
和Interop.ExApp.dll
。
还有一个额外的问题:由于 ExApp API 没有发生有意义的变化,我如何编译一个版本my.dll
来使用任何已安装的 ExApp 版本?
.net - Tlbimp .net 和 COM 组件仍然需要注册
我使用了一个 COM DLL 并使用 tlbimp 创建了一个可以在我的 .net 3.5 项目中使用的 DLL。我在尝试使用 COM 接口时遇到错误,我想知道是否仍需要在将安装应用程序的服务器上注册 COM dll?如果是这样,我应该注册哪个 DLL,使用 tlpimp 创建的还是使用 tlpimp 的原始 DLL?
c# - 如何将一个 COM 类实例作为参数传递给 C# 中的另一个 COM 方法?
我使用TlbImp.exe
. 一个有一个包装器描述为的类
该对象必须作为参数传递
然后我这样调用方法:
我认为正在传递的对象不是正确的。我觉得TlbImp.exe
可以链接那些 DLL 并使用GNOTDRSignatureServer
而不是UnmanagedType.IUnknown
,或者我可以使用System.Runtime.InteropServices.Marshal.GetComInterfaceForObject
我的代码有什么问题?
.net - 为什么 TlbImp 不能将此用于 DIA 的 COM 接口正确导入 .NET?
我尝试导入 Microsoft 的 DIA SDK 以用于 .NET:
这似乎在大多数情况下都可以正常工作,只是由于某种原因,它不包含某些接口(例如IDiaEnumFrameData
),而包含其余接口则很好。
(该接口既不存在于 .DLL 文件中,也不存在于 .TLB 文件中——即使它存在于 C 和头文件中。)
这是什么原因造成的?
java - com4j 包装器生成问题
我正在尝试使用 tlbimp-20110320.jar 为 com4j 生成包装器。我还尝试了具有相同错误的 2008 版本。即使我尝试针对 tut 中的示例运行,我也会遇到相同的错误。
在 Iceman 提供了所需库的链接后,我能够让它运行一点。但是,我必须将 arg4j 内容复制到 tlbimp jar 中,并将 com4j 内容也复制到 tlbimp jar 中。现在我明白了