CodePlex上TlbImp新版本发布:基于规则的自定义功能

利用Tlbimp.exe和AxImp.exe将ocx 控件转换为公共语言类型程序集 将COM组件/ActiveX控件转化为CLR程序集供客户端编译调用 阅读详情

大家好。距离上次我们发布在CodePlex上的新版本TlbImp已经过了快半年了。在这半年的时间内,除了主要进行.NET 4.0相关的新功能开发之外,我们上海CLR小组也没有忘记进行TlbImp相关功能的继续开发,于今年3月9日再次发布了TlbImp的一个新版本:

http://www.codeplex.com/clrinterop/Release/ProjectReleases.aspx?ReleaseId=17579

这次版本中我们引入了两个重要功能:

1. 通过规则自定义互操作程序集以及规则自定义编辑器

2. 回归测试工具

基于规则的自定义功能

我们先来看一下自定义功能。这个新版本的TlbImp允许用户通过自定义的一系列的规则来指定TlbImp如何生成最终的互操作程序集。之前有不少用户向我们提到在使用TlbImp的时候,经常需要对TlbImp生成的结果做一些修改,而且必须是自动化的修改。他们通常使用的方法是先使用ILDASM反汇编,使用Perl脚本修改反汇编代码,然后再使用ILASM重新生成互操作程序集。为了解决这个问题,我们引入了一个新功能,允许用户以非常自由的方式来定义他们最终想要看到的结果。

让我们先来看一个简单的例子:假设我们希望改变互操作程序集中的某个类型的名称。先双击打开TlbImpConfigFileEditor.exe启动自定义文件的编辑器,然后打开我们需要自定义的Type Library,这里我们选择发布版本中Samples/ChangeManagedName/ChangeManagedNameSample.tlb文件,如下:

clip_image002

左边显示的是我们需要自定义的Type Library,而右边,则是我们需要自定义的规则,这些规则可以告诉TlbImp如何修改最终生成的互操作程序集。首先,将我们需要修改的IComparable接口结点从左边拖到右边,松开鼠标,出现如下的对话框:

clip_image004

上面这个对话框是用来创建一个新的规则,规则指定TlbImp对于哪些对象应用何种动作。在这个对话框中我们需要定义这个规则所对应的动作(Action),因此需要在Action下拉框中选择ChangeManagedName,然后点击OK即可。之后编辑器状态如下(需要自己展开结点):

clip_image006

大家可以看到右边已经出现了一个新的规则叫做Change interface name,对应的Category是Type,也就是说这个规则是针对互操作程序集中的类型设置的。Condition指定了规则所需要满足的条件,选中Condition节点(或者其子节点)可以在下面的Condition Expression中看到对应的规则表达式,也就是NativeName Equal ‘ICompareable’,意思是该规则是针对任何名字叫做IComparable的类型。注意因为我们是从IComparable节点直接拖到右边,因此这些条件是编辑器自动生成的。大家如果需要也可以自己通过点击Native Equal IComparable条件来修改,或者点击 来增加新的条件。现在我们可以点击 节点,在下拉框中选择TypeKind,第二个下拉框选择Equal,第三个下拉框选择Interface,最终的结果如下:

clip_image008

注意表达式节点的组织方式是类似语法树的样子,也就是说And节点下面的互相之间是And关系,最终的结果总是可以在Condition Expression一栏看到:

( NativeName Equal 'IComparable' ) And ( TypeKind Equal 'Interface')

当编辑好了规则的时候,我们需要指定对应的具体动作的参数。因为我们需要修改对象类型的名称,双击Action下面的NewName子结点会弹出如下对话框:

clip_image010

输入我们想修改成的名字,然后点击OK。

这样一个规则就完成了:

clip_image012

修改完毕之后存盘为ChangeInterfaceName.xml,然后在命令行下面调用TlbImp,使用/config参数引用之前存盘的Config文件(黄色加亮部分:

clip_image014

之后通过ILDASM打开我们生成的结果:

clip_image016

可以看到IComparable已经被改名成了IMyInterface。

TlbImp总共支持下面几种动作(Action):

1. ChangeManagedName:修改类型、函数的名称

2. ResolveTo:将一个类型替换为另外一个类型(可以是另外一个程序集的类型)。现在已经有用户在CodePlex上面提出这个功能需求了:http://clrinterop.codeplex.com/WorkItem/View.aspx?WorkItemId=2565

3. AddAttribute:为任意类型添加任意Attribute

4. PreserveSig:为单个函数或者类型中的所有函数添加PreserveSigAttribute并相应修改函数的原型

5. ConvertTo:修改函数中的参数类型

每种对应的动作在Samples目录下面都有对应的例子,有兴趣的朋友可以参照文档自行实验。

回归测试工具

为了帮助用户在修改TlbImp代码的时候可以更容易保证自己的修改不会引起其他问题,我们引入了一个简单的回归测试工具,大家可以到这里下载:

http://clrinterop.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=17579

下载完毕之后打开Bin目录下面的TlbImpRegressionTestTool.exe,然后通过File菜单打开Testcase目录下面的testcases.xml文件:

clip_image018

可以看到所有的Testcase都被列出来了。下一步在Run菜单里面选择Settings,输入TlbImp2.exe和WinDiff.exe所在位置:

clip_image020

完毕之后,选择Run下面的Run All Testcases或者Run Selected Testcases,该工具便会调用TlbImp2.exe依次运行Testcase来检查TlbImp2的相应功能是否正确:

clip_image022

绿色为测试成功,红色为失败。如果有失败的情况,双击该行可以打开WinDiff比较TlbImp2当前生成的结果和应该生成的结果之间的区别。

最后,希望大家能够积极试用TlbImp的新功能。如果有希望看到的TlbImp的新功能,或者对目前的TlbImp有哪些觉得做的不够好的地方,都可以到下面的地址提出你的宝贵意见: http://clrinterop.codeplex.com/WorkItem/List.aspx

tlbimp全版本V1.1/V2.0/V3.5/V4.0/V4.5 tlbimp.exe,用于导出.net类型库 各各不同版本的tlbimp可以导出对应版本的.net dll库 一般用于把excel.exe导出成excel.dll 压缩包里提供了已经导出好的各版本excel.dll,以及导出脚本,仅供参考 立即下载

相关推荐

TlbImp.exe

TlbImp TlbImp TlbImp TlbImp TlbImp TlbImp TlbImp TlbImp TlbImp TlbImp TlbImp TlbImp TlbImp TlbImp TlbImp TlbImp TlbImp TlbImp

Tlbimp 生成c#互操作com组件dll

Tlbimp C:\Windows\System32\HelpPaneProxy.dll F:\MyWorkSpace\HelpPaneProxySharp.dll Microsoft (R) .NET Framework Type Library to Assembly Converter 4.0.303 Copyright (C) Microsoft Corporation. All...

如鹿渴慕泉水的专栏 1247

用Tlbimp 教你转化 .net

用Tlbimp 教你转化 .net。。。。重要的路径先设置...

找了半天才知道TlbImp.exe在哪里运行。。。

本人非常的白。。。几乎一点DOS知识也不知道,于是看到一下这句话就傻掉了:执行命令: tlbimp excel.exe /out:excel.dll  这句话在哪执行呢?Ctrl+R 里面?还是cmd里面?还是现在Ctrl+R 中输入tlbimp?结果看到个“在Visual Studio命令行中输入”,于是打开VS,在顶部状态栏中找到了“视图”→“其他窗口”→“命令窗口”  结果还

我の國度 1万+

AGV避坑指南:海康控制系统与Modbus设备对接的那些‘坑’

本文深入解析海康AGV控制系统与Modbus设备对接中的常见问题及解决方案,涵盖通信协议对接、信号干扰、硬件层问题和软件优化策略。通过真实案例和实用技巧,帮助工程师规避典型陷阱,提升系统稳定性和效率。

l3m4n的博客 739

OpenCV视频防抖算法实现与优化指南

本文详细解析了如何使用OpenCV实现视频防抖算法。通过特征点检测与光流跟踪估算帧间运动,利用滑动平均平滑运动轨迹,并应用仿射变换重塑视频帧。文章提供了完整的代码实现、参数调优指南及黑边处理等优化技巧,帮助开发者高效处理手持拍摄等场景下的视频抖动问题。

weixin_29062823的博客 338

找不到tlbimp命令的解决方法

今天看到一篇讲.Net平台下开发中文语音应用程序的文章(http://www.microsoft.com/china/community/program/originalarticles/techdoc/Cnspeech.mspx),觉得很好,就试了一下.可发现没有tlbimp这个命令.这是怎么回事?在网上搜了一下,终于找到了解决的方法.原因是:没有设置相关的环境变量.所以系统找不到这个命

wayne 我的陋室我做主 7783

3D打印机新手必看:VSCode+PlatformIO搭建Marlin固件编译环境(附常见错误解决)

本文为3D打印机新手详细介绍了如何使用Visual Studio Code和PlatformIO搭建Marlin固件编译环境。内容涵盖从软件安装、源码配置到编译实战的全流程,并重点解析了依赖冲突、内存不足等高频错误的解决方案,帮助用户快速上手并成功编译自定义固件。

j2k3l4的博客 703

Tlbimp及ILdasm使用

<br />由于最近研究sapi,相关的就使用到了Tlbimp及ILdasm工具。<br /> <br />Tlbimp在vs自带的cmd中使用,只是简单的使用了下将普通dll等文件转换为donet使用的dll,<br />命令大概为tlbimp a.dll /out:dotneta.dll<br />转换后即可使用ILdasm反汇编程序查看其中的对象方法。

beck0505的专栏 539

802.1AS-2011_Gptp协议栈

GPTP(广义时钟同步协议,或IEEE 802.1AS)的基本功能是确保局域网中所有的时钟都同步,并提供时间信息。这种协议用于在局域网中进行同步和时间对齐,其目的是确保网络中各设备的时间一致性。

weixin_49041703的博客 2540

本地部署静态网站托管平台 Netlify 并实现外部访问(Windows 版本)

Netlify 是一款基于云计算的网站部署和托管平台,专为开发者提供便捷的静态网站和 Jamstack 应用部署服务。它的能力在于将网站构建、部署、托管以及持续集成等流程高度集成,简化了开发和运维的复杂程度。用户无需关心服务器的配置、维护等工作。本文将详细介绍如何在本地安装 Netlify 以及结合路由侠内网穿透实现外网访问 Netlify。

lyxnwct的博客 523

类型库导入程序 (Tlbimp.exe)

NET Framework 工具 类型库导入程序 (Tlbimp.exe)   类型库导入程序将 COM 类型库中的类型定义转换为公共语言运行库程序集中的等效定义。Tlbimp.exe 的输出为二进制文件(程序集),该文件中包含在原始类型库中定义的类型的运行库元数据。可以使用诸如 Ildasm.exe 这样的工具检查此文件。 复制到剪贴板tlbimp tlb

高兴地带 3000

Windows下高效部署llama.cpp:从环境配置到模型量化的完整指南

本文提供了一份详尽的Windows系统下部署llama.cpp的完整指南。内容涵盖从Python环境配置、使用CMake与MinGW编译工具链的搭建,到编译llama.cpp项目、获取并转换模型为GGUF格式,以及执行模型量化和基础推理测试的全过程。指南旨在帮助开发者在普通Windows电脑上,无需高端显卡,仅凭CPU即可高效运行大语言模型,并重点解决了部署过程中常见的环境与编译错误。

weixin_28841265的博客 878

CodePlex开源版Tlbimp.exe的两个新功能

昨天,我们开发团队在CodePlex上发布了一个Tlbimp的新版本。关于Tlbimp的用途介绍这里就不多说了,大家有兴趣的话可以参看半个月前写的《Tlbimp.exe在CodePlex上开源啦!》一文。半个月后,我们根据用户最迫切的需求,给Tlbimp的功能作了小小的改进,并将这个最新版本再次发布在CodePlex上。主要的新功能包含了两个新的选项:/v2:当用户在命令行中输入 >tlb

CLR & Silverlight上海研发团队Blog 2098

调整开关频率处理传导骚扰超标的系统方法

针对某产品在传导骚扰测试中660kHz频点超标问题,分析发现与DC-DC模块开关频率直接相关。通过调整模块开关频率至500kHz,使其避开标准限值严苛频段(0.53-1.8MHz),在不改变硬件设计的情况下实现测试通过。该案例表明,利用EMC标准的频率特性进行"频谱设计"比传统滤波手段更高效,建议在多模块系统中采用1:2:4等频率规划策略,从源头降低噪声耦合风险。这一频率迁移思路为EMC优化提供了新范式。

硬核科技 325

【23】C++实战篇——C++报错:LNK2001:无法解析的外部符号 ,LNK2019: 无法解析的外部符号,原因分析及解决方法

该文分析了VS项目中出现的"无法解析的外部符号"LNK2001/LNK2019错误。问题表现为跨项目共享变量时,Projector项目无法解析Line项目中声明的外部变量ImgSavePath和ImgFormat。原因在于头文件声明了变量但未包含实现的源文件。解决方法是将getLine.cpp文件添加到Projector项目中。文章还总结了两种错误代码的区别:LNK2001通常对应变量缺失,LNK2019对应函数缺失。最后列出了具体的报错信息,包括无法解析的变量和函数符号。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 2004

库文件了(.tlb)件编译成.dll文件。

最后看了看msdn,知道在.net 2003命令窗口下编译会自动搜索引用目录,便没用cmd命令窗口了,进入.net 2003命令窗口(在Visual Studio .net 2003菜单中),输入“midl rtccore.idl”,显示找不到control.odl文件,于是按照2提供的方法,输入“midl rtccore.idl /I "D:/Program Files/Microsoft

jack 专栏 1324

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C#调用COM接口的三种方式

C# 调用COM接口 获取HRESULT而不是抛出异常

sinat_35549832的博客 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Tlbimp.exe在Codeplex上开源啦!

这是我们这里的CLR Interop开发团队在开源网站codeplex.com上发布的第二个开源工具了。Tlbimp.exe,经常在COM与托管代码之间做编程开发的开发人员应该会对这个工具比较熟悉。它是一个将COM的type library转换生成托管的程序集(interop assembly),供托管代码进行调用的一个非常实用的工具。生成的Interop assembly中包含了与所转换的COM

CLR & Silverlight上海研发团队Blog 2358

TlbImp源码在CodePlex公开!欢迎下载

对.NET中COM Interop比较熟悉的朋友应该都对TlbImp比较了解了。这个工具是专门用来将Type Library(类型库)转换成对应的Interop Assembly,以便在.NET程序中使用对应的COM组件。这个Interop Assembly中主要包含RCW(Runtime Callable Wrapper)的Metadata(而非源代码。RCW的实现其实是在CLR内部),以及部分

张羿的优快云专栏 3644

C# 未能找到类型或命名空间名称xxx的四种情况和解决办法总结!!

在写c#项目的时候,总是遇到上述的错误 总结一下,大概分为四类 第一种:在文件中没有使用using ** 的命名空间 解决办法: 就是在文件头部,添加对应的using语句。 第二种:是没有引用相应的.dll文件* 解决办法: 在相应的类库或WebSite下的bin目录,右键选择“添加引用”,找到对应的.dll文件即可。 第三种:是 .Net 框架版本不一致导致的 解决办法: 点击解决方案下的类库项...

wangfanna的博客 5万+

.NET直接编译成本地代码:.NET Native架构简介

这篇Blog好久没有更新了。最近一直在忙.NET Native相关的事情(主要是MCG),但是又因为保密的原因不能在Blog中提到。上个星期Build终于发布(可惜没有去成,team名额太少),我也终于可以谈下.NET Native的一些东西了,呵呵。 如果大家还没有看到之前的发布信息,可以去下面几个网址看看: http://msdn.microsoft.com/en-US/v

张羿的优快云专栏 4万+
上一篇: 预告:公共语言运行库(CLR)开发系列课程(4):COM Interop进阶
下一篇: MSDN中文网络广播预告:.NET 4.0新特性系列课程(2):契约式设计 (Level 200)
ATField
博客等级 码龄25年 673粉丝 119原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值