typedef struct _RASDIALPARAMS { 
   DWORD  dwSize; 
   TCHAR  szEntryName[RAS_MaxEntryName + 1]; 
   TCHAR  szPhoneNumber[RAS_MaxPhoneNumber + 1]; 
   TCHAR  szCallbackNumber[RAS_MaxCallbackNumber + 1]; 
   TCHAR  szUserName[UNLEN + 1]; 
   TCHAR  szPassword[PWLEN + 1]; 
   TCHAR  szDomain[DNLEN + 1] ; 
#if (WINVER >= 0x401)
   DWORD  dwSubEntry;
   DWORD  dwCallbackId;
#endif
} RASDIALPARAMS; 
这个结构在vb6(windows 2000系统)程序中如何写,因为程序可能在98 2000中都要运行。

解决方案 »

  1.   

    #If...Then...#Else 指令条件编译已选择的 Visual Basic 代码块。语法#If expression Then
    statements
    [#ElseIf expression-n Then
    [elseifstatements]]
    [#Else
    [elsestatements]]
    #End If#If...Then...#Else 指令的语法具有以下几个部分:部分 描述
    expression 必要。包含一个或多个条件编译常数、文字与运算符的任何表达式,其值为 True 或 False。
    statements 必要。Visual Basic 程序行或编译指令,如果关联的表达式为 True,则运行它们。
    expression-n 可选。由一或多个条件编译常数、文字和运算符组成的任何一个表达式,其值为 True 或 False。
    elseifstatements 可选。一个或多个程序行或编译命令,如果 expression-n 为 True,则运行它们。
    elsestatements 可选。一个或多个程序行或编译命令,如果以前的expression 或 expression-n 中没有一个为 True,则运行它们。
    说明#If...Then...#Else 指令的作用与 If...Then...Else 语句相同,其差异在于 #If、#Else、#ElseIf,及 #End If 指令没有单独成行的形式,也就是说,在指令所在的那一行,不能有其他代码出现。条件编译通常用来编译不同平台上的同一个程序。也可以用来避免调试程序代码出现在可执行程序中。条件编译时被排除的程序代码在最后的可执行文件中被完全略去,所以不会对程序的大小或功能有任何影响。无论结果如何,都要计算所有表达式。所以,在表达式中用到的所有常数都必须加以定义— 任何未定义的常数都会被当作 Empty 来计算取值。注意   Option Compare 语句不会影响 #If 及 #ElseIf 语句中的表达式。条件编译指令中的表达式总是用 Option Compare Text 计算值。=============================================
    本示例在 #If...Then...#Else构造中引用条件式编译器常数,来决定编译那部分语句。' 如果 Mac 常数为 true,则编译 #If后面的语句。
    #If Mac Then 
    '. 将 Mac 语句写在此处。
    '.
    '.
    ' 否则,如果是 32 位窗口程序,则编译这个语句:
    #ElseIf Win32 Then
    '. 将 32 位窗口程序语句写在此处。
    '.
    '.
    ' 再否则,则编译以下语句:
    #Else
    '. 将其他作业平台适用的语句写在此处。
    '.
    '.
    #End If
      

  2.   

    表达式是什么,这个我在msdn中也看到了,在VB中的各种不同的版本如何处理。
      

  3.   

    Public Type VBRasDialParams
        EntryName As String
        PhoneNumber As String
        CallbackNumber As String
        UserName As String
        Password As String
        Domain As String
        SubEntryIndex As Long
        RasDialFunc2CallbackId As Long
    End Type 你的问题又没有涉及nt3.51以下版本,不需要条件编译
    详细可参考:
    http://home.iprimus.com.au/billmcc/PlatformVB/dun/rasdialparams.htm
      

  4.   

    可以判断win的版本呀,
    getversionex(&osvi)
    wsprintf(str,"%d.%d",osvi.dwmajorversion,osvi.dwminorversion)
    winver=stof(str)
    if winver>=5.0 then
    .....2000
    else 
    ......98
      

  5.   

    : xhstudio(希辉) 
    我说点有问题。情况是这样的
    typedef struct _RASDIALPARAMS { 
       DWORD  dwSize; 
       TCHAR  szEntryName[RAS_MaxEntryName + 1]; 
       TCHAR  szPhoneNumber[RAS_MaxPhoneNumber + 1]; 
       TCHAR  szCallbackNumber[RAS_MaxCallbackNumber + 1]; 
       TCHAR  szUserName[UNLEN + 1]; 
       TCHAR  szPassword[PWLEN + 1]; 
       TCHAR  szDomain[DNLEN + 1] ; 
    #if (WINVER >= 0x401)
       DWORD  dwSubEntry;
       DWORD  dwCallbackId;
    #endif
    } RASDIALPARAMS; 
    这个结构要在模块的前面来声明。
    我如何控制在不同的系统中是不同的结构。这在VC中用#if (WINVER >= 0x401)来实现,但是在VB中我不知如何做
      

  6.   

    检测操作系统,根据不同的操作系统进行条件编译
    Option Explicit'模块代码
    Type OSVERSIONINFO
            dwOSVersionInfoSize As Long
            dwMajorVersion As Long
            dwMinorVersion As Long
            dwBuildNumber As Long
            dwPlatformId As Long
            szCSDVersion As String * 128      '  Maintenance string for PSS usage
    End Type
    Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long
    Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
    Public Const SM_CLEANBOOT = 67
    Public Const SM_DEBUG = 22
    Public Const SM_SLOWMACHINE = 73
    Public Const VER_PLATFORM_WIN32s = 0
    Public Const VER_PLATFORM_WIN32_WINDOWS = 1
    Public Const VER_PLATFORM_WIN32_NT = 2
      

  7.   

    在声明部分如何用
    : totti0115(keke) 
    你的意思是声明不同的结构,在不同的系统调用不同的结构。
    这个方法可以实现,我的意思是有没有在VC中实现的方法。
      

  8.   

    当然可以,又小看VB了不是?看msdn
      

  9.   

    passer_wave(路人) 
    我看了,但是没有找到
    能否给一个简单的例子
      

  10.   

    没有msdn吗?????????????? 
    #If...Then...#Else 指令
          条件编译已选择的 Visual Basic 代码块。语法#If expression Thenstatements[#ElseIf expression-n Then[elseifstatements]][#Else[elsestatements]]#End If#If...Then...#Else 指令的语法具有以下几个部分:部分 描述 
    expression 必要。包含一个或多个条件编译常数、文字与运算符的任何表达式,其值为 True 或 False。 
    statements 必要。Visual Basic 程序行或编译指令,如果关联的表达式为 True,则运行它们。 
    expression-n 可选。由一或多个条件编译常数、文字和运算符组成的任何一个表达式,其值为 True 或 False。 
    elseifstatements 可选。一个或多个程序行或编译命令,如果 expression-n 为 True,则运行它们。 
    elsestatements 可选。一个或多个程序行或编译命令,如果以前的expression 或 expression-n 中没有一个为 True,则运行它们。 
    说明#If...Then...#Else 指令的作用与 If...Then...Else 语句相同,其差异在于 #If、#Else、#ElseIf,及 #End If 指令没有单独成行的形式,也就是说,在指令所在的那一行,不能有其他代码出现。条件编译通常用来编译不同平台上的同一个程序。也可以用来避免调试程序代码出现在可执行程序中。条件编译时被排除的程序代码在最后的可执行文件中被完全略去,所以不会对程序的大小或功能有任何影响。无论结果如何,都要计算所有表达式。所以,在表达式中用到的所有常数都必须加以定义— 任何未定义的常数都会被当作 Empty 来计算取值。注意   Option Compare 语句不会影响 #If 及 #ElseIf 语句中的表达式。条件编译指令中的表达式总是用 Option Compare Text 计算值。#If...Then...#Else 指令示例
    本示例在 #If...Then...#Else构造中引用条件式编译器常数,来决定编译那部分语句。' 如果 Mac 常数为 true,则编译 #If后面的语句。
    #If Mac Then 
       '. 将 Mac 语句写在此处。
       '.
       '.
    ' 否则,如果是 32 位窗口程序,则编译这个语句:
    #ElseIf Win32 Then   
       '. 将 32 位窗口程序语句写在此处。
       '.
       '.
    ' 再否则,则编译以下语句:
    #Else
       '. 将其他作业平台适用的语句写在此处。
       '.
       '.
    #End If