我有一个使用.Net组件(经由VB6应用程式的.tlb参考)当作为已编译的应用程序执行,其工作正常VB6的应用,但它从VB6 IDE产生错误时它试图某一点使用.NET组件。
我要指出的是,当.NET组件,就是要调用第三方报告组件出现错误。该错误是特定于报表的组成部分。趣谈不能够从字符串转换为其他类型。
该.TLB是在相同的位置应用程序可执行文件,所以我不为什么应该是一个问题。没有为dll的一个一个的.config但只指定了日志文件应该是。
我需要在IDE中运行的应用程序,以调试和单步执行代码。还有什么问题呢?请问VB6 IDE是寻找在不同的位置对某些DLL文件?
这可能是由于运行时版本不匹配。尝试以下方法:
创建用于IDE(例如,IDE可执行+的.config的EXE名).config文件。
粘贴了下列文件:
<configuration>
<startup>
<supportedRuntime version="v2.0.50727"/>
<requiredRuntime version="v2.0.50727" safemode="true"/>
</startup>
</configuration>
这将确保在.NET 2运行时被加载,无论以何种顺序.NET COM组件被激活时(其中的一些可以由IDE被加载,从而导致在该过程的运行时不匹配)。
一种铸造异常不容易被与程序的默认目录的问题进行说明。这是所有的,应当当您从VB6 IDE,而不是直接运行你的应用程序是不同的。
你将不得不使用调试器来找出什么地方出了错。幸运的是,当您使用VB6,很容易。在Visual Studio中打开你的.NET项目启动。项目+属性,调试选项卡。选择“启动外部程序”,单击带有点的按钮并导航到VB6.EXE。它应该位于C:\ Program Files文件\微软的Visual Studio \ VB98 \ VB6.EXE,如果你使用的是默认安装选项。
您可以设置“命令行选项”设置为路径到您的.VBP项目,所以IDE会自动加载它。不是绝对必要的。
调试+异常,检查“通用语言运行时例外”,抛出该异常复选框。按F5键启动调试器。如有必要,VB6 IDE现在将打开,加载VB6项目。运行该项目,并重新创建失败案例。这应该引起Visual Studio调试器断点。您可能需要手动切换到它的任务栏按钮应该闪烁。使用普通的调试工具,找出为什么抛出异常。
请注意,您也可以设置断点在Visual Studio中,如果有用的话,你需要单步执行代码,找出什么是错的。当你按下F5,因为DLL还没有加载断点指示灯变成空心。只要您的VB6项目创建一个从你的.NET代码的类对象,DLL将被加载(在输出窗口中可见)和断点指示灯会变成固体。如果没有发生,然后你可能需要使该项目的bin \ Debug文件夹中DLL被注册为COM服务器使用/基本代码选项来运行Regasm.exe。
卢塞罗一样,我想知道配置文件......我最近有一个互操作场景,我不得不为了得到.NET的DLL到应用程序域范围内正确地读取设置以创建VB6可执行一个配置文件中的。网库运行。在这种情况下,我能够把现有的配置为DLL并将其复制作为vb6.exe.config其中VB6是您的VB6可执行文件的名称。
如果这个思想是正确的方向,我会跟卢塞罗同意你的* .exe.config文件与需向始发可执行文件的IDE ...我相信这是VB6.EXE相关。
虽然VB6的可执行文件本身并不需要config文件的工作,一个配置文件的存在将影响得到加载任何.NET组件,因此它可以有所作为。
您可以通过暂时硬编码设置排除配置文件。如果在VB6 IDE配合工作,那么你知道你在正确的方向前进。
迈克·L具有说,这可是我的回答here描述了所有关于VB6和exe.config文件的问题,我相信这是这里的问题。
我会尝试注册使用regasm与/代码库开关.NET组件。该工具会给你一个警告,如果该组件是不是在GAC,但除非你有在同一台机器上的几个不同版本的组件,你可以忽略警告。
你可以尝试以下。这可能是一个解决办法,或者你也许能够找出实际的问题是什么:
我也有同样的问题(使用一些基于.NET的DLL通过ActiveX COM传统VB6应用程序)。为了得到这个工作我已经做以下(有可能跳过某些以下的,但我知道每个人都有在一个点或其他被要求):
这是一个鸟枪法的东西,但用上面我仍然可以使用VB6 IDE的Windows 8.1在64位和调试VB6代码(甚至通过安装Visual Studio IDE中的.NET COM组件)。