vb能条件编译吗?

sunnf 2003-11-07 02:31:48
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中都要运行。
...全文
134 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunnf 2003-11-11
  • 打赏
  • 举报
回复
passer_wave(路人)
我看了,但是没有找到
能否给一个简单的例子
  • 打赏
  • 举报
回复
没有msdn吗??????????????




#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 指令示例
本示例在 #If...Then...#Else构造中引用条件式编译器常数,来决定编译那部分语句。

' 如果 Mac 常数为 true,则编译 #If后面的语句。
#If Mac Then
'. 将 Mac 语句写在此处。
'.
'.
' 否则,如果是 32 位窗口程序,则编译这个语句:
#ElseIf Win32 Then
'. 将 32 位窗口程序语句写在此处。
'.
'.
' 再否则,则编译以下语句:
#Else
'. 将其他作业平台适用的语句写在此处。
'.
'.
#End If

  • 打赏
  • 举报
回复
当然可以,又小看VB了不是?

看msdn
sunnf 2003-11-10
  • 打赏
  • 举报
回复
在声明部分如何用
: totti0115(keke)
你的意思是声明不同的结构,在不同的系统调用不同的结构。
这个方法可以实现,我的意思是有没有在VC中实现的方法。
射天狼 2003-11-08
  • 打赏
  • 举报
回复
检测操作系统,根据不同的操作系统进行条件编译
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
sunnf 2003-11-08
  • 打赏
  • 举报
回复
: 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中我不知如何做
since1990 2003-11-08
  • 打赏
  • 举报
回复
up
Ranma_True 2003-11-08
  • 打赏
  • 举报
回复
sunnf 2003-11-08
  • 打赏
  • 举报
回复
没有查到在msdn中
strongfisher 2003-11-08
  • 打赏
  • 举报
回复
可以
coolpeng 2003-11-08
  • 打赏
  • 举报
回复
能,好好看看MSDN里的例子。
xhstudio 2003-11-07
  • 打赏
  • 举报
回复
我记着条件编译生成的代码是固定的啊
那么对应的系统就要编译一个对应的软件,这样好吗?
我认为还是在程序里处理比较好
李赞红 2003-11-07
  • 打赏
  • 举报
回复
当然可以了
totti0115 2003-11-07
  • 打赏
  • 举报
回复
可以判断win的版本呀,
getversionex(&osvi)
wsprintf(str,"%d.%d",osvi.dwmajorversion,osvi.dwminorversion)
winver=stof(str)
if winver>=5.0 then
.....2000
else
......98
kmzs 2003-11-07
  • 打赏
  • 举报
回复
条件编译可以判断系统情况来声明变量
jordi2014 2003-11-07
  • 打赏
  • 举报
回复
能。
rainstormmaster 2003-11-07
  • 打赏
  • 举报
回复
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
射天狼 2003-11-07
  • 打赏
  • 举报
回复
什么表达式?!
sunnf 2003-11-07
  • 打赏
  • 举报
回复
表达式是什么,这个我在msdn中也看到了,在VB中的各种不同的版本如何处理。
射天狼 2003-11-07
  • 打赏
  • 举报
回复
#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

7,732

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧