Vb6 方法';WriteLine';对象的';ITextStream';失败

Vb6 方法';WriteLine';对象的';ITextStream';失败,vb6,Vb6,这可能是一个基本的问题,但我无法解决这个问题,因为我对VB6非常陌生。 这就是我在网上搜索此错误代码时遇到的情况 “对象“~”的方法“~”失败”这通常发生在dll不可用时 准确地说,当运行时甚至无法判断 该对象是,并且该对象无法传播更多信息 返回。它可以是任何组件。它是不匹配的DLL文件。“ 也尝试使用regsvr32.exe注册scrrun.dll,但没有成功 尝试运行程序时,在下面的代码块中获取错误 Sub PrintToConsole(ByVal LineToPrint As String

这可能是一个基本的问题,但我无法解决这个问题,因为我对VB6非常陌生。 这就是我在网上搜索此错误代码时遇到的情况

“对象“~”的方法“~”失败”这通常发生在dll不可用时 准确地说,当运行时甚至无法判断 该对象是,并且该对象无法传播更多信息 返回。它可以是任何组件。它是不匹配的DLL文件。“

也尝试使用regsvr32.exe注册scrrun.dll,但没有成功

尝试运行程序时,在下面的代码块中获取错误

Sub PrintToConsole(ByVal LineToPrint As String)
    Dim fso As New FileSystemObject
    fso.GetStandardStream(StdOut).WriteLine (LineToPrint)
End Sub
试试这个:

Dim fso as Object
Set fso = CreateObject("Scripting.FileSystemObject")
fso.GetStandardStream(StdOut).WriteLine (LineToPrint)

GetStandardStream方法返回TextStream对象

FileSystemObject对象

GetStandardStream方法

要链接控制台子系统,可以将以下行添加到.VBP文件的末尾:

[VBCompiler]
LinkSwitches=/SUBSYSTEM:CONSOLE
然后编译的EXE应该可以正常工作

也考虑这个示例程序。这里是模块1. Bas:

Option Explicit

Private StdIn As Scripting.TextStream
Private StdOut As Scripting.TextStream

'--- Only required for testing in IDE or Windows Subsystem ===
Private Declare Function AllocConsole Lib "kernel32" () As Long
Private Declare Function GetConsoleTitle Lib "kernel32" _
    Alias "GetConsoleTitleA" ( _
    ByVal lpConsoleTitle As String, _
    ByVal nSize As Long) As Long
Private Declare Function FreeConsole Lib "kernel32" () As Long

Private mEnableConsole As Boolean
Private mAllocated As Boolean

Private Property Get EnableConsole() As Boolean
    EnableConsole = mEnableConsole
End Property

Private Property Let EnableConsole(ByVal RHS As Boolean)
    Dim Title As String

    If Not RHS And mEnableConsole Then
        If mAllocated Then
            StdOut.Write "Press enter to continue..."
            StdIn.ReadLine
            FreeConsole
            mAllocated = False
        End If
        mEnableConsole = False
    ElseIf RHS And Not mEnableConsole Then
        Title = Space$(260)
        If GetConsoleTitle(Title, 260) = 0 Then
            AllocConsole
            mAllocated = True
        End If
        mEnableConsole = True
    End If
End Property
'--- End testing ---------------------------------------------

Private Sub Main()
    Dim Msg As String

    EnableConsole = True
    On Error GoTo Cleanup

    With New Scripting.FileSystemObject
        Set StdIn = .GetStandardStream(Scripting.StdIn)
        Set StdOut = .GetStandardStream(Scripting.StdOut)
    End With

    With StdOut
        .Write "Hello from "
        .Write App.Path
        .Write "\"
        .Write App.EXEName
        .WriteLine ".exe"

        .Write "Command line: ["
        .Write Command$()
        .WriteLine "]"

        .WriteLine "Type an input message and press Enter:"

        Msg = StdIn.ReadLine()
        .WriteLine "I saw:"
        .WriteLine Msg
    End With
    Msg = 1 / 0 'Cause an exception for illustration!

Cleanup:
    If Err Then
        With StdOut
            .Write "#Error: "
            .Write CStr(Err.Number)
            .Write ", "
            .WriteLine Err.Description
        End With
    End If
    EnableConsole = False
End Sub
这很方便,因为我们大多数人都喜欢能够进行测试和调试

为了测试编译的程序,您可以尝试类似TestProject1.cmd的方法:

@Echo Off
Project1 Run from CMD file!
Pause
当然,这假设您编译为Project1.exe


您也可以将
StdIn
StdOut
EnableConsole
全部
Public
用于其他模块的访问。不过,我可能只会将
EnableConsole
设置为“getter”
Public

仍然是同样的问题,debug在
fso.GetStandardStream(StdOut).WriteLine行中显示错误(LineToPrint)
看看这个页面。它不仅仅是使用GetStandardStream。大多数VB6程序都是为Windows子系统编译和链接的,在Windows子系统中没有标准的I/O流可供使用。很可能这就是出错的地方。@Bob77希望您是指运行LINK.exe
“C:\Program文件(x86)\Microsoft Visual Studio\VB98\LINK.EXE"/EDIT/SUBSYSTEM:CONSOLE Application.exe
我完全知道这一点,而且您可以手动执行此操作,甚至可以在.VBP文件中指定子系统。不过,VB6的大多数临时用户都不知道这一点。@Bob77 awesome实际上Windows子系统是个问题,我的系统中有几个LINK.exe必须运行正确的解决方法。可以找到更多信息问题似乎只有在使用GetStandardStream方法时才存在,还尝试注释以下两行以调试
Dim fso作为新的FileSystemObject
fso.GetStandardStream(StdOut).WriteLine(LineToPrint)
然后是
debug.Print“这是错误”&(LineToPrint)
对象“ITextStream”的方法“WriteLine”失败错误未弹出