如何在VB6中向调试控制台输出信息?

16

我刚接触VB。我想测试一些旧的VB代码,但我需要能够在控制台中打印输出以测试设置在代码中的某些值。如何从VB中打印输出到控制台?

4个回答

26
使用Debug.Print。但是在VB6应用程序中没有控制台,可以打印到调试窗口。

12

这不是预期的被接受的答案,因为Debug.Print是进行IDE测试的方法。

但是只是为了展示如何在VB6中轻松使用标准的I/O流:

Option Explicit
'
'Reference to Microsoft Scripting Runtime.
'

Public SIn As Scripting.TextStream
Public SOut 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 Allocated As Boolean

Private Sub Setup()
    Dim Title As String

    Title = Space$(260)
    If GetConsoleTitle(Title, 260) = 0 Then
        AllocConsole
        Allocated = True
    End If
End Sub

Private Sub TearDown()
    If Allocated Then
        SOut.Write "Press enter to continue..."
        SIn.ReadLine
        FreeConsole
    End If
End Sub
'--- End testing ---------------------------------------------

Private Sub Main()
    Setup 'Omit for Console Subsystem.

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

    SOut.WriteLine "Any output you want"
    SOut.WriteLine "Goes here"

    TearDown 'Omit for Console Subsystem.
End Sub

请注意,VB6中实际的控制台程序只需要很少的代码。大部分代码是用于在程序未在控制台子系统下运行时分配控制台窗口。


3
+1: 不错啊。所以,就像我之前说的那样,知道了方法就很容易 :) - Binary Worrier
对我不起作用。我已经包含了Microsoft Scripting Runtime。它可以编译和运行,但它只是不会在我从中运行它的dos提示符中打印任何内容。也许它在Windows 10上不起作用? - Developer Webs

4

使用OutputDebugString并使用优秀的免费工具DebugView查看消息。可以从IDE或已编译的可执行文件进行调试。Karl Peterson提供了更多信息和可重用代码,请参阅此处


1
这是一个非常出色的答案。最小的麻烦,运行得很好。 - BoredBsee

0

这不是Vb6可以轻松完成的事情(我相信它是可以完成的,但你需要调用本地Win32 API,如果你只是用它进行调试,这并不值得痛苦)

在我看来,你最好的选择是将这些值写入日志文件。


实际上,使用FSO可以很容易地在VB6中完成。当然,这仅适用于您拥有控制台的情况,而在VB6程序中您很少会这样做 - 除非您AllocConsole()或作为重新链接为控制台子系统的EXE运行。但我同意它并不是最好的调试工具。 - Bob77
@Bob:所以,这属于“知道怎么做就容易”的范畴吗? :) - Binary Worrier
没什么了不起的。看一下我发布的多余答案就行。 - Bob77

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接