VB6应用+ .NET组件工作作为编译应用程序,但不是在VB6 IDE

问题描述 投票:4回答:7

我有一个使用.Net组件(经由VB6应用程式的.tlb参考)当作为已编译的应用程序执行,其工作正常VB6的应用,但它从VB6 IDE产生错误时它试图某一点使用.NET组件。

我要指出的是,当.NET组件,就是要调用第三方报告组件出现错误。该错误是特定于报表的组成部分。趣谈不能够从字符串转换为其他类型。

该.TLB是在相同的位置应用程序可执行文件,所以我不为什么应该是一个问题。没有为dll的一个一个的.config但只指定了日志文件应该是。

我需要在IDE中运行的应用程序,以调试和单步执行代码。还有什么问题呢?请问VB6 IDE是寻找在不同的位置对某些DLL文件?

.net vb6 interop
7个回答
4
投票

这可能是由于运行时版本不匹配。尝试以下方法:

创建用于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被加载,从而导致在该过程的运行时不匹配)。


3
投票

一种铸造异常不容易被与程序的默认目录的问题进行说明。这是所有的,应当当您从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。


3
投票

卢塞罗一样,我想知道配置文件......我最近有一个互操作场景,我不得不为了得到.NET的DLL到应用程序域范围内正确地读取设置以创建VB6可执行一个配置文件中的。网库运行。在这种情况下,我能够把现有的配置为DLL并将其复制作为vb6.exe.config其中VB6是您的VB6可执行文件的名称。

如果这个思想是正确的方向,我会跟卢塞罗同意你的* .exe.config文件与需向始发可执行文件的IDE ...我相信这是VB6.EXE相关。

虽然VB6的可执行文件本身并不需要config文件的工作,一个配置文件的存在将影响得到加载任何.NET组件,因此它可以有所作为。

您可以通过暂时硬编码设置排除配置文件。如果在VB6 IDE配合工作,那么你知道你在正确的方向前进。


2
投票

迈克·L具有说,这可是我的回答here描述了所有关于VB6和exe.config文件的问题,我相信这是这里的问题。


1
投票

我会尝试注册使用regasm与/代码库开关.NET组件。该工具会给你一个警告,如果该组件是不是在GAC,但除非你有在同一台机器上的几个不同版本的组件,你可以忽略警告。


1
投票

你可以尝试以下。这可能是一个解决办法,或者你也许能够找出实际的问题是什么:

  • 加载在Visual Studio .NET的DLL
  • 在项目属性,调试选项卡,设置开始行动“启动外部程序”,并将其设置为“C:\ Program Files文件\微软的Visual Studio \ VB98 \ VB6.EXE”
  • F5,现在VB6将启动
  • 加载您的VB6项目在VB6调试
  • 调试。

0
投票

我也有同样的问题(使用一些基于.NET的DLL通过ActiveX COM传统VB6应用程序)。为了得到这个工作我已经做以下(有可能跳过某些以下的,但我知道每个人都有在一个点或其他被要求):

  1. DLL和TLB文件复制到VB6的IDE EXE所在的文件夹(如C:\ Program Files文件(x86)的\微软的Visual Studio \ VB98)。凌乱和恼人的,但我没有找到一个替代。
  2. 添加合适的VB6.exe.config文件(如上所述)。
  3. 您可能还需要为的.config DLL的本身(例如,如果你的.NET的DLL abc.dll命名,配置文件将被abc.dll.config)文件。这似乎有些东西会从VB6的配置文件,并从DLL配置文件中其他的东西来读。它大概可以制定出什么从何而来,但其最简单的只是为了让这两个配置文件是相同的。
  4. 请确保您已经应用VB6 SP6。
  5. 运行VB6 IDE为管理员。
  6. 在运行XP SP3兼容模式下VB6 IDE。

这是一个鸟枪法的东西,但用上面我仍然可以使用VB6 IDE的Windows 8.1在64位和调试VB6代码(甚至通过安装Visual Studio IDE中的.NET COM组件)。

© www.soinside.com 2019 - 2024. All rights reserved.