VB.net生成的Dll和VB生成的Dll有何不同?

时间:2022-04-09 14:02:44
VB.net生成的Dll和VB生成的Dll有何不同呢?我知道VB生成的Dll是基于COM组件的,那VB.net呢?

8 个解决方案

#1


net直接生成的DLL,VB不能直接调用,虽然扩展名都是.dll,但根本就是两种截然不同的东西。vb的dll就是一个没有main的exe文件,符合COM规范,里面都是直接的机器码。而.net的dll,是由跑在.netCLR上的中间二进制字节码以及其他一些有自描述功能的元数据组成的。如果你的机器上没装.netframework的话,不用说VB不能用,谁也不能用。当然,装了VB6也不能直接用。
可以通过下面的方式实现
  1。创建一个接口并且自己写一个类来实现这个接口
  2。创建强名并且对组件签名,然后生成.net组件。
  3。打开VisualStudio.NET2003命令提示符,在打开的窗口中转到组件所在的Bin目录下,假设组建生成的Dll为TestCom.dll,输入regasm/tlb:TestCom.tlbTestCom.dll回车,regasm程序将创建一个类型库并在Windows注册表中对其进行注册,以使TestCom.dll中的类对COM客户端可用,输入:gacutil/ITestCom.dll回车,gacutil程序将程序集添加到GAC中,并显示状态消息,通知您操作已完成
  4。经过上面几个步骤之后,你的组件就可以被COM调用了,你可以试验一下,用vb6.0可以引用这个组件,换句话来说,这个组件已经变成COM了
    上面的方法是通过系统的功能,把.net的dll包装成了一个COM组件,就好比在系统和.net组件之间搭了一个桥,于是.net组件可以像一般的COM组件一样被VB6调用。说个最简单的道理:VB.net可以使用System.String,VB6.0中哪有什么System.String?那么谁负责把System.String对象转换成VB认识的String变量呢?所以要把.net写的类封装成一个COM 就可以调用了。

#2


好!接分! VB.net生成的Dll和VB生成的Dll有何不同?

#3


学习了,虽然没有看懂!汗颜!

#4


该回复于2012-03-19 09:26:14被版主删除

#5


概念基本是懂了,但要学会应用,还要经过很多实践。

#6


还有个区别:vb生成的dll需要注册,vb.net生成的dll不需要注册。

这个不知道是否正确?

#7


肿么还自问自答呢

#8


引用 7 楼 yjqmaster 的回复:
肿么还自问自答呢
一直没人回答,然后就在Google上搜到了

#1


net直接生成的DLL,VB不能直接调用,虽然扩展名都是.dll,但根本就是两种截然不同的东西。vb的dll就是一个没有main的exe文件,符合COM规范,里面都是直接的机器码。而.net的dll,是由跑在.netCLR上的中间二进制字节码以及其他一些有自描述功能的元数据组成的。如果你的机器上没装.netframework的话,不用说VB不能用,谁也不能用。当然,装了VB6也不能直接用。
可以通过下面的方式实现
  1。创建一个接口并且自己写一个类来实现这个接口
  2。创建强名并且对组件签名,然后生成.net组件。
  3。打开VisualStudio.NET2003命令提示符,在打开的窗口中转到组件所在的Bin目录下,假设组建生成的Dll为TestCom.dll,输入regasm/tlb:TestCom.tlbTestCom.dll回车,regasm程序将创建一个类型库并在Windows注册表中对其进行注册,以使TestCom.dll中的类对COM客户端可用,输入:gacutil/ITestCom.dll回车,gacutil程序将程序集添加到GAC中,并显示状态消息,通知您操作已完成
  4。经过上面几个步骤之后,你的组件就可以被COM调用了,你可以试验一下,用vb6.0可以引用这个组件,换句话来说,这个组件已经变成COM了
    上面的方法是通过系统的功能,把.net的dll包装成了一个COM组件,就好比在系统和.net组件之间搭了一个桥,于是.net组件可以像一般的COM组件一样被VB6调用。说个最简单的道理:VB.net可以使用System.String,VB6.0中哪有什么System.String?那么谁负责把System.String对象转换成VB认识的String变量呢?所以要把.net写的类封装成一个COM 就可以调用了。

#2


好!接分! VB.net生成的Dll和VB生成的Dll有何不同?

#3


学习了,虽然没有看懂!汗颜!

#4


该回复于2012-03-19 09:26:14被版主删除

#5


概念基本是懂了,但要学会应用,还要经过很多实践。

#6


还有个区别:vb生成的dll需要注册,vb.net生成的dll不需要注册。

这个不知道是否正确?

#7


肿么还自问自答呢

#8


引用 7 楼 yjqmaster 的回复:
肿么还自问自答呢
一直没人回答,然后就在Google上搜到了