我已经检查过的一些资源:http://www.experts-exchange.com/Programming/Languages/.NET/Visual_Basic.NET/Q_23359339.html
http://mygreenpaste.blogspot.com/2006/03/net-framework-20-configuration-tool.html
http://support.microsoft.com/kb/186063
我正忙于开发将与我们现有的VB6代码挂钩的.NET模块。我已经创建了一个测试VB6项目来启动新代码,该项目由一个带有按钮的窗体组成,该按钮的单击事件是
Dim launcher As New VB6InteropLaunchPad.launcher
launcher.FormTypeEnum = FormTypeEnum_MySpecificForm
launcher.launchAppropriateForm当我第一次点击按钮时,它是成功的。但是,如果我再次单击该按钮,则会出现以下错误:
Run-time error '-2146233079 (80131509)': Automation Error除非我关闭并重新启动.NET,否则对IDE代码的后续调用将失败,并显示相同的错误消息。如果我将VB6项目编译成可执行文件,同样的事情也会发生。我必须关闭可执行文件,然后再次运行它才能访问.NET代码。
我在http://support.microsoft.com/kb/186063上尝试了这个建议,并执行了以下操作:
' http://support.microsoft.com/kb/186063
Const FORMAT_MESSAGE_FROM_SYSTEM = &H1000
Private Declare Function FormatMessage Lib "kernel32" Alias _
"FormatMessageA" (ByVal dwFlags As Long, lpSource As Long, _
ByVal dwMessageId As Long, ByVal dwLanguageId As Long, _
ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Any) _
As Long
Private Function MessageText(lCode As Long) As String
Dim sRtrnCode As String
Dim lRet As Long
sRtrnCode = Space$(256)
lRet = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, 0&, lCode, 0&, _
sRtrnCode, 256&, 0&)
If lRet > 0 Then
MessageText = Left(sRtrnCode, lRet)
Else
MessageText = "Error not found."
End If
End Function
On Error GoTo errHandler
Dim launcher As New VB6InteropLaunchPad.launcher
launcher.FormTypeEnum = FormTypeEnum_MySpecificForm
launcher.launchAppropriateForm
Exit Sub
errHandler:
MsgBox MessageText(Err.Number)
MsgBox Err但是找不到错误。
有什么办法解决这个问题吗?我试着用set launcher = Nothing,但是没用。
谢谢你们。
发布于 2009-09-28 23:42:34
考虑到这里涉及的所有内容,我认为没有足够的信息来对实际问题做出有意义的猜测。如果我处在你的情况下,我可能会做的第一件事就是在Visual Studio中调试.NET组件,看看问题是不是来自.NET组件的未处理的异常:
.NET component项目/解决方案,转到项目-> MyDotNetProject属性...)。菜单项。选择"Debug“选项卡。将“启动操作”设置为“启动外部程序”,然后浏览到通过步骤2生成的代码。选中"Enable
“(启用非托管代码启动
希望您将尝试您概述的相同场景,这一次它将导致一个异常,进而导致VS调试器在有问题的.NET代码行中断。如果您没有看到行为上的任何变化,那么转到调试->异常...菜单项(在VS中)并选中相应的复选框,以便在抛出“公共语言运行时异常”时立即中断。
发布于 2009-09-28 17:26:35
谷歌找到了以下来自same automation error in a similar interop situation用户的建议。
唯一有点不寻常的是我公开的类继承了一个基类。因为我不想让基类暴露给COM,所以它是用
[ComVisible(false)]装饰的。当我最终从基类中删除此装饰时,COM类在VB6中工作。
因此,如果一个.NET类的基类不可见,它似乎不想将它暴露给COM。我的教训是,要公开的类不应该继承。它们应该将委托给实际执行工作的类的包含实例的类单独委托。
发布于 2009-09-28 21:56:41
看看这篇文章。它为这些类型的情况提供了一步一步的故障排除步骤。
http://www.vbrad.com/article.aspx?id=46
https://stackoverflow.com/questions/1487406
复制相似问题