请问,使用 VB6 调用 C#.Net 的 DLL ,不会要在每一台目标电脑上都要重新编绎一次才可以吧?????

global_biz 2013-10-10 12:59:49
Hi,

我在一台 电脑A 里面使用 VB6 调用 C#.Net 的 DLL ,当时不知在该机器用过多少种方法,忘记哪个对哪个错了,

最后成功让 VB6 可以调用到 C#.Net 的 DLL 里面的方法,

并且,电脑A 里面通过 Visual Basic 6.0 也可以最终生成一个 TestVB6.exe 并成功运行调用 C#.Net DLL。


---------------------------

现在问题来了,我把 电脑A 里面的 TestVB6.exe 以及 C#.Net.DLL 复制到 电脑B, 运行的时候提示出错,具体出错原因就是一开始的时候,找不到类型库可能是。

-------------------------------

请问,使用 VB6 调用 C#.Net 的 DLL ,不会要在每一台目标电脑上都要重新编绎一次才可以吧?????

请指教一下,谢谢。
...全文
238 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
global_biz 2013-10-11
  • 打赏
  • 举报
回复
引用 12 楼 caozhy 的回复:
[quote=引用 11 楼 global_biz 的回复:] [quote=引用 10 楼 caozhy 的回复:] regsvr32 x:\path\file.ocx/dll
所有看到的 .ocx 都需要做 regsvr32 吗?[/quote] 自动注册其实也相当于调用这个命令。[/quote] 我现在想在 VM 机测试一下你上面所说的 “ocx可以自动发现和注册,但是权限要足够(注册ocx的权限高于仅仅运行程序的权限)”, 请问我如何建立一个用户来测试你说的权限问题? 我想摸拟出用户装这个我打包的安装程序,然后也是在该用户下运行来试下结果。 我现在是直接 Administrator 来安装与运行的,暂时还没有你说的权限问题,也没见过。
threenewbee 2013-10-11
  • 打赏
  • 举报
回复
引用 11 楼 global_biz 的回复:
[quote=引用 10 楼 caozhy 的回复:] regsvr32 x:\path\file.ocx/dll
所有看到的 .ocx 都需要做 regsvr32 吗?[/quote] 自动注册其实也相当于调用这个命令。
global_biz 2013-10-11
  • 打赏
  • 举报
回复
引用 10 楼 caozhy 的回复:
regsvr32 x:\path\file.ocx/dll
所有看到的 .ocx 都需要做 regsvr32 吗?
threenewbee 2013-10-11
  • 打赏
  • 举报
回复
regsvr32 x:\path\file.ocx/dll
global_biz 2013-10-11
  • 打赏
  • 举报
回复
引用 8 楼 caozhy 的回复:
dll无法自己注册,ocx可以自动发现和注册,但是权限要足够(注册ocx的权限高于仅仅运行程序的权限) 最好还是打包注册下。
我在安装包里面已经做了 .Net 的 .dll 的程序集注册,但是我不清楚 .ocx 如何做注册, 我用 VB Deploy 工具生成出来的 .cab 文件整个解压开后,发现里面有很多个 .ocx ,我已经把 .cab 整个解压出来的文件全部放到 Test.exe 同一目录下。 我是不是要把所有看到的 .ocx 都在安装过程中注册一下? 同时,如何注册? 另外,如果系统中存在不同版本的 .ocx ,这样在安装过程随便注册 .ocx 会否引起系统冲突,或其他隐藏的问题?
threenewbee 2013-10-11
  • 打赏
  • 举报
回复
dll无法自己注册,ocx可以自动发现和注册,但是权限要足够(注册ocx的权限高于仅仅运行程序的权限) 最好还是打包注册下。
global_biz 2013-10-11
  • 打赏
  • 举报
回复
引用 5 楼 caozhy 的回复:
ocx只要注册就可以,放在哪里无所谓。
引用 6 楼 dongxinxi 的回复:
注册后,其他需要该组件的程序都不用再次注册了 放在目录下,只是你的程序能用(系统加载程序集会逐一搜索系统目录和当前目录),其他程序仍然会报错
我现在只需要 Test.exe 这个程序能够使用就可以,所以,我把所有 .ocx 与 .dll 都放在与 Test.exe 同一个目录了, 只需要确定不用其他工具来注册 .ocx 与 .dll 就可以了, 因为这是生产环境,请帮忙确定一下逻辑是不是这样?
  • 打赏
  • 举报
回复
注册后,其他需要该组件的程序都不用再次注册了 放在目录下,只是你的程序能用(系统加载程序集会逐一搜索系统目录和当前目录),其他程序仍然会报错
threenewbee 2013-10-11
  • 打赏
  • 举报
回复
ocx只要注册就可以,放在哪里无所谓。
global_biz 2013-10-11
  • 打赏
  • 举报
回复
引用 3 楼 wangjcltj 的回复:
[quote=引用 2 楼 global_biz 的回复:] [quote=引用 1 楼 dogfish 的回复:] 你其他机器是否有支持版本的dotNET framework才行。
我已经装了 .Net 了,与电脑A一样装了同一个版本,不同的是电脑A是用来开发的, 电脑B 相当于是客户端用的没有安装工发工具。 我刚才在 VB6 的出错信息发现,这个提示是: Error Number 339 Component 'MSCAL.OCX' or one of its dependencies not correctly registered: a file is missing or invalid 从这个错误提示来看,好像不是调用 .Net DLL 的问题了,请问这个是什么原因?? 我在电脑A里面用 Visual Basic 6 就直接生成一个 exe 复制到 电脑B 来运行了,结果就出现这个提示, 是不是有什么东西没做??[/quote] 报错信息的意思是系统组件中'MSINET.OCX' 文件丢失了或者不能使用,解决这个问题很简单。 下载MSINET.OCX文件,解压后把MSINET.OCX文件复制到c:\windows\system32\目录下。 然后点击“开始”“运行”中输入 regsvr32 msinet.ocx 回车,再试试,你的软件就可以运行了。[/quote] 请问 .ocx 控件是必须要注册的吗? 我试了直接把 .ocx 控件放到与 .exe 同一个目录下,然后再启动 .exe 就没有问题了, 但是,我现在不知道如果 .ocx 与 .exe 放在同一目录下,是否仍然需要注册 .ocx ? 还是不需要注册就可以?
global_biz 2013-10-11
  • 打赏
  • 举报
回复
引用 15 楼 caozhy 的回复:
[quote=引用 14 楼 global_biz 的回复:] [quote=引用 12 楼 caozhy 的回复:] [quote=引用 11 楼 global_biz 的回复:] [quote=引用 10 楼 caozhy 的回复:] regsvr32 x:\path\file.ocx/dll
所有看到的 .ocx 都需要做 regsvr32 吗?[/quote] 自动注册其实也相当于调用这个命令。[/quote] 还有个问题,如果你是说自动注册,假设我使用 Administrator 去安装与使用一次,这样在 Administrator 运行 Test.exe 的时候,这些 .ocx 就会被自动注册一次, 那如果接下来的使用 User A 没什么权限的用户去运行 Test.exe ,那就表示其实 .ocx 已经注册过了?[/quote] 之所以注册需要更高的权限,是因为注册是系统级别的(往注册表的全局位置写入数据),所以当然是注册了,所有的用户都能用。[/quote] 谢谢,我来测试一下不同的用户访问执行。
threenewbee 2013-10-11
  • 打赏
  • 举报
回复
引用 14 楼 global_biz 的回复:
[quote=引用 12 楼 caozhy 的回复:] [quote=引用 11 楼 global_biz 的回复:] [quote=引用 10 楼 caozhy 的回复:] regsvr32 x:\path\file.ocx/dll
所有看到的 .ocx 都需要做 regsvr32 吗?[/quote] 自动注册其实也相当于调用这个命令。[/quote] 还有个问题,如果你是说自动注册,假设我使用 Administrator 去安装与使用一次,这样在 Administrator 运行 Test.exe 的时候,这些 .ocx 就会被自动注册一次, 那如果接下来的使用 User A 没什么权限的用户去运行 Test.exe ,那就表示其实 .ocx 已经注册过了?[/quote] 之所以注册需要更高的权限,是因为注册是系统级别的(往注册表的全局位置写入数据),所以当然是注册了,所有的用户都能用。
global_biz 2013-10-11
  • 打赏
  • 举报
回复
引用 12 楼 caozhy 的回复:
[quote=引用 11 楼 global_biz 的回复:] [quote=引用 10 楼 caozhy 的回复:] regsvr32 x:\path\file.ocx/dll
所有看到的 .ocx 都需要做 regsvr32 吗?[/quote] 自动注册其实也相当于调用这个命令。[/quote] 还有个问题,如果你是说自动注册,假设我使用 Administrator 去安装与使用一次,这样在 Administrator 运行 Test.exe 的时候,这些 .ocx 就会被自动注册一次, 那如果接下来的使用 User A 没什么权限的用户去运行 Test.exe ,那就表示其实 .ocx 已经注册过了?
wangjcltj 2013-10-10
  • 打赏
  • 举报
回复
引用 2 楼 global_biz 的回复:
[quote=引用 1 楼 dogfish 的回复:] 你其他机器是否有支持版本的dotNET framework才行。
我已经装了 .Net 了,与电脑A一样装了同一个版本,不同的是电脑A是用来开发的, 电脑B 相当于是客户端用的没有安装工发工具。 我刚才在 VB6 的出错信息发现,这个提示是: Error Number 339 Component 'MSCAL.OCX' or one of its dependencies not correctly registered: a file is missing or invalid 从这个错误提示来看,好像不是调用 .Net DLL 的问题了,请问这个是什么原因?? 我在电脑A里面用 Visual Basic 6 就直接生成一个 exe 复制到 电脑B 来运行了,结果就出现这个提示, 是不是有什么东西没做??[/quote] 报错信息的意思是系统组件中'MSINET.OCX' 文件丢失了或者不能使用,解决这个问题很简单。 下载MSINET.OCX文件,解压后把MSINET.OCX文件复制到c:\windows\system32\目录下。 然后点击“开始”“运行”中输入 regsvr32 msinet.ocx 回车,再试试,你的软件就可以运行了。
global_biz 2013-10-10
  • 打赏
  • 举报
回复
引用 1 楼 dogfish 的回复:
你其他机器是否有支持版本的dotNET framework才行。
我已经装了 .Net 了,与电脑A一样装了同一个版本,不同的是电脑A是用来开发的, 电脑B 相当于是客户端用的没有安装工发工具。 我刚才在 VB6 的出错信息发现,这个提示是: Error Number 339 Component 'MSCAL.OCX' or one of its dependencies not correctly registered: a file is missing or invalid 从这个错误提示来看,好像不是调用 .Net DLL 的问题了,请问这个是什么原因?? 我在电脑A里面用 Visual Basic 6 就直接生成一个 exe 复制到 电脑B 来运行了,结果就出现这个提示, 是不是有什么东西没做??
Dogfish 2013-10-10
  • 打赏
  • 举报
回复
你其他机器是否有支持版本的dotNET framework才行。
Free Spire.XLS for .NET 是e-iceblue公司开发的一款支持对所有Excel格式类型文件进行操作的.NET 控件。它适用于任何类型的应用程序比如ASP.NET Web应用程序或者Windows桌面应用程序。Spire.XLS for .NET允许开发人员创建和管理Excel,而不需要安装Microsoft Excel或者Microsoft Office。相比Microsoft,Spire.XLS for .NET对于开发人员来说是一个更好的选择 - 自动化,安全,稳定,可扩展性延伸,速度快,价格便宜和功能强大。 通过使用Free Spire.XLS for .NET,开发人员可以快速方便的查看,生成,读写以及自定义编辑Excel文件。Spire.XLS for .NET支持Excel 97-2003, Excel 2007, Excel 2010 and Excel 2013。它还支持C#, VB.NET, ASP.NET和 ASP.NET MVC编程语言 作为一款专业,强大,方便易用的控件,Spire.XLS for .NET有一下主要功能: 新建Excel文件,编辑已有的Excel文件,多种保存Excel方式,设置Excel文件属性,文件打印设置,合并,拆分或者拷贝单元格,支持对Excel文件加锁或者加密保护。 Spire.XLS for .NET支持把数据从数据库导出到Excel工作表,或者把数据从Excel数据导入到数据库。 Spire.XLS for .NET 提供强大的功能为开发者设置单元格格式。这次格式化数字,文字缩进,定位调整,设置单元格边线,单元格填充以及保护等。 开发人员可以轻松的利用Spire.XLS for .NET向Excel文件里面写入内容,包括超过530多种的公式,70多种表格,支持插入图片,不同类型的文字,链接,注释甚至VBA等。 Spire.XLS for .NET 还允许开发人员将Excel文件转换成PDF, HTML, CSV, Text, XML以及图片格式。 注:下载包含有Spire.xls.dll文件以及部分Demo, 你可以调用DLL并参照Demo提供的代码处理Excel文档。
NET程序员的开发利器.NET Reflector 一、 简介   程序集,作为.NET时代的动态链接库,蕴藏了太多的软件秘密。为此,Visual Studio内置的ILDASM成为最初挖掘程序集的上佳工具。但自从Reflector出现后,ILDASM相形见拙。因为,Reflector能提供更多的程序集信息,而且是免费的工具。   如今,在Visual Studio.NET中编译源代码(无论是VB还是C#)时,编译器都会将高级源代码翻译成MSIL,即“微软中间语言”,而不是特定的机器指令。具有更多安全性、版本控制、共享能力与其它相关元数据的中间语言(IL),是包在一个或多个DLL或可执行文件中的。   基于ILDASM检查程序集中的IL有时很有用,但它要求我们熟悉MSIL。通常,比起IL,大多数开发人员对像C#或Visual Basic这样的高级程序设计语言更为熟悉。   Reflector的出现使.NET程序员眼前豁然开朗,因为这个免费工具可以将.NET程序集中的中间语言反编译成C#或者Visual Basic代码。除了能将IL转换为C#或Visual Basic以外,Reflector还能够提供程序集中类及其成员的概要信息、提供查看程序集中IL的能力以及提供对第三方插件的支持。   二、 下载与运行Reflector   Reflector是由微软员工Lutz Roeder编写的免费程序。这个软件经常更新,你可以在http://www.aisto.com/roeder/dotnet下载最新的版本。在本文成文之时,Reflector的最新版本为5.0.35.0,仅有1M大小。只要双击下载后的Reflector.exe文件即可运行Reflector。   默认情况下,Reflector会打开一组公共程序集(mscorlib、System、System.Data、System.Drawing等等)。每个打开的程序集都列在Reflector的主窗口中。单击程序集旁边的+图标可以展开树结构并展示程序集的命名空间。每个命名空间旁边都有一个相关的+图标,单击这个图标将显示这个命名空间内的类。除此以外,还可以展开每个类,显示类的成员:事件、字段、方法与属性。   要想查看其它程序集(包括我们自己创建的程序集)的细节,你可以使用菜单命令“File→Open”。然后,浏览到想要查看的程序集。只要选择了有效的.NET程序集,这个程序集就可以在Reflector的主窗口中与其它默认程序集共同显示。要想从Reflector的主窗口中删除程序集,只需右击程序集并选择“Close”。   三、 使用Reflector反汇编程序集   提供基本的程序集是Reflector唾手可得的功能,然而,Reflector真正的威力体现在它的反汇编能力。只要浏览到类级的成员,就可以通过Tools菜单中的Disassembler项(或在该项上单击右键)反汇编此成员。这将打开第二个窗格,以C#、Visual Basic、Delphi或者IL显示反汇编后的内容。图2以C#语言展示了对SmtpClient类中Abort方法的反汇编结果。   有了Reflector的反编译功能,要研究.NET框架基类库就容易多了。我们完全可以在没有源代码的情况下研究我们所创建或者正在使用的程序集相应源代码。   不用太担心,你自己的.NET应用程序还有其它受保护措施。但是,想阻止别人查看.NET程序集的IL(继而反编译成C#或者Visual Basic)是不可能的,但你可以使用“混淆”技术使IL变得混乱。目前,市场上有许多.NET混淆产品,比如:PreEmptive Solution的Dotfuscator、WiseOwl的Dmeanor以及Remotesoft的.NET Obfuscator等。   四、 Reflecator的其它功能   除了作为对象浏览器与反汇编器之外,Reflector还可以显示类与其成员的调用与被调用图、提供单键访问Google或MSDN搜索的能力并提供了允许第三方开发人员为Reflector创建插件的框架。   要查看调用或被调用图,只需要在树视图中选择一个成员,访问Tools菜单,选择Call Graph或Callee Graph选项即可。Call Graph会列出所选项所调用的成员,而Callee Graph列出调用所选项的成员。   通过使用插件,Reflector的功能可以得到进一步扩展。目前有能显示程序集依赖图、自动加载当前运行中的程序集、输出整个程序集的反汇编内容以及在Visual Studio中作为Reflector的宿主等的插件。还有更多插件都列在http://www.codeplex.com/reflectoraddins中。在此,我极力推荐有兴趣的读者前去一看。   不出乎所料,的确存在一个Reflector.VisualStudio插件。有了这个插件,就可以让Reflector集成在Visual Studio环境中,进而取代以前那个有些“拙漏”的对象浏览器。   首先,我们需要在机器上准备Reflector的最新版,然后从http://www.testdriven.NET/reflector下载最新版本的Reflector.VisualStudio插件。据说安装了此插件之后,Reflector能够与Visual Studio完美融合。但遗憾的是,本人试下载此软件并安装(仅能得到TestDriven.NET-2.8.2130 RTM个人测试版本,时间7/30/2007,大小3.3M)后,没有大发现—仅是在VS2005中添加“Go to Reflector”和一个帮助菜单项。点击“Go to Reflector”菜单项仅是从VS2005内部启动Reflector而已。   有了Reflector.VisualStudio插件(正版,下面是根据在线资料介绍),Reflector可以寄在Visual Studio中Reflector不仅是一个对象浏览器、反汇编器,包裹在同一个程序中的所有功能还可以寄于Visual Studio中。   五、 小结   还记得Spy++吗?在Win32时代,这个软件对于我们分析一个陌生软件的设计思路可谓立下汗马功劳。在如今的.NET时代,Reflector又成为每个严肃的.NET开发人员工具箱中必不可少的精髓工具之一。怎么样,请赶紧试锋吧。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧