主题:[讨论]QB vs VB
w1212q
[专家分:660] 发布于 2006-11-18 16:52:00
一:split函数 QB < VB
二:Data语句 QB > VB
三:环境 QB < VB
四:编译 QB > VB
五:限制 QB < VB
QB Y 2,S 3
VB Y 3,S 2
回复列表 (共12个回复)
沙发
jyf1987 [专家分:930] 发布于 2006-11-25 10:30:00
问题是
现在要处理的数据那么多
用data去输入不实际
再一个编译问题
计算机处理速度很快
可以忽略不计
板凳
w1212q [专家分:660] 发布于 2006-11-27 13:24:00
to lou 1:
found! ?
not Basic ?
not Error ?
File in DayFeatHer ? ? ?
3 楼
tianyuan003 [专家分:3780] 发布于 2006-11-27 14:15:00
楼主多看点基础的书吧.
QB 和 VB 的根本差别不在你列举的那些东西里.
QB 和 VB 的区别就象 80286 和奔腾的区别一样.一个是为 80286 上面的 DOS 系统设计的,另一个是为奔腾等 CPU 上运行的 WINDOWS 系统设计的.
4 楼
w1212q [专家分:660] 发布于 2006-11-29 10:43:00
回3楼;
女中豪杰啊;
5 楼
w1212q [专家分:660] 发布于 2006-11-29 10:45:00
移位函数;
Function byteleft(byte1 As Byte, n As Integer) As Byte `将byte1左移n位
Dim intem As Byte `临时变量
Dim intem1 As Byte `临时变量
Dim x, y As Integer
intem1 = byte1
For x = 1 To n `移多少位就循环多少次
For y = 8 To 1 Step -1 `从第八位(左边第一位)开始循环左移
Select Case y
Case 8
If (intem1 And &H80) = &H80 Then `如果临时变量intem1的第八位是1,
intem = &H1 `则将临时变量intem置1,
Else
intem = &H0 `反之置0
End If
Case 7
If (intem1 And &H40) = &H40 Then `如果临时变量intem1的第七位是1,
intem1 = intem1 Or &H80 `则将其第八位置1(其它位不变),
Else
intem1 = intem1 And &H7F `反之将第八位置0(其它位不变)
End If
Case 6
If (intem1 And &H20) = &H20 Then `操作与上面相同
intem1 = intem1 Or &H40
Else
intem1 = intem1 And &HBF
End If
Case 5
If (intem1 And &H10) = &H10 Then
intem1 = intem1 Or &H20
Else
intem1 = intem1 And &HDF
End If
Case 4
If (intem1 And &H8) = &H8 Then
intem1 = intem1 Or &H10
Else
intem1 = intem1 And &HEF
End If
Case 3
If (intem1 And &H4) = &H4 Then
intem1 = intem1 Or &H8
Else
intem1 = intem1 And &HF7
End If
Case 2
If (intem1 And &H2) = &H2 Then
intem1 = intem1 Or &H4
Else
intem1 = intem1 And &HFB
End If
Case 1
If (intem1 And &H1) = &H1 Then
intem1 = intem1 Or &H2
Else
intem1 = intem1 And &HFD
End If
If intem = &H1 Then `移完第一位后,如果intem是1(即第八位是1)
intem1 = intem1 Or &H1 `则将intem1的第一位置1
Else
intem1 = intem1 And &HFE `反之置0
End If
End Select
Next y
Next x
byteleft = intem1 `将intem1的值返回给函数名
End Function
参照此程序段,不难实现循环右移
6 楼
w1212q [专家分:660] 发布于 2006-11-29 10:50:00
查看DLL文件(根据VB改编,应该没问题);
Const TRUE=-1
Const FALSE=0
Function C_GetFilePE(FILE_PATH As String) As INTEGER
On Error GoTo ine
Dim i As Long
Dim j As Long
Dim C_Characteristics As String
Dim C_File As String
Dim C_Fr As Integer
Dim C_Sign As Byte
Dim C_SignOff As Long
Dim C_COFFOff As Long
Dim C_OPThead As Long
Dim C_Flag As Integer
Dim Temp_Str As String
Dim C_Base As Long
Dim C_DataTable As Long
Dim C_DataCount As Long
Dim C_DataName(1 To 8) As Byte
Dim C_DataNameT As String
C_Fr = FreeFile
Call C_GetFileInfo(FILE_PATH, C_List)
C_Characteristics = "文件特征: "
Open FILE_PATH For Binary Access Read As #C_Fr
'偏移&H3C + 1地址得到文件是否为PE格式文件
Get #C_Fr, &H3C + 1, C_Sign
Get #C_Fr, C_Sign + 1, C_SignOff
7 楼
w1212q [专家分:660] 发布于 2006-11-29 10:50:00
If Not C_SignOff = &H4550 Then
Close C_Fr
C_Characteristics = "此文件不是PE格式文件。"
C_List.AddItem C_Characteristics
C_GetFilePE = False
GoTo inerr
Else
C_Characteristics = "PE格式文件。"
C_List.AddItem C_Characteristics
C_GetFilePE = True
End If
'得到COFF文件头的偏移地址
C_COFFOff = CLng(C_Sign) + 4
'得到可选文件头的偏移地址
C_OPThead = C_COFFOff + 20
'得到文件属性
Get #C_Fr, C_COFFOff + 18 + 1, C_Flag
Temp_Str = "文件属性: "
print Temp_Str
Call GetPEChar(C_Flag, C_List)
'得到文件基址
Get #C_Fr, C_OPThead + 29, C_Base
Temp_Str = "文件基址: " & "&H" & Hex(C_Base)
print Temp_Str
Get #C_Fr, C_OPThead + 92 + 1, C_DataCount
C_DataTable = C_OPThead + 96 + C_DataCount * 8
If C_DataCount > 0 Then
Temp_Str = "段名: "
print Temp_Str
For i = 1 To C_DataCount
'得到段名称
For j = 1 To 8
Get #C_Fr, C_DataTable + j + (i - 1) * 40, C_DataName(j)
Next j
C_DataNameT = StrConv(C_DataName, vbUnicode)
C_DataNameT = Trim(Replace(C_DataNameT, Chr(0), " "))
If C_DataNameT <> "" Then
Temp_Str = " " & C_DataNameT
print Temp_Str
End If
Next i
End If
Close C_Fr
GoTo inerr
ine:
MsgBox Err.Description, , "错误信息"
inerr:
End Function
---------------------------------------------------------
Function C_GetFileInfo(FILE_PATH As String)
Dim C_FileSize As Long
Dim C_Lpdwhandle As Long
Dim C_Data() As Byte
Dim C_Lret As Long
Dim C_VerSion As String
Dim C_LpBuffer As Long
Dim C_LpSize As Long
Dim C_FF As VS_FIXEDFILEINFO
Dim C_Lup As Long
Dim C_Llow As Long
Dim C_FVersion As String
Dim C_PVersion As String
Dim C_FDataTime As String
Dim C_CCompany As String
Dim C_Lun As Long '以下判断文件语言版本
Dim C_ILunID As Integer
Dim C_ICodePage As Integer
Dim C_SLunID As String
Dim C_SCodePage As String
Dim i As Long
8 楼
w1212q [专家分:660] 发布于 2006-11-29 10:51:00
C_FileSize = GetFileVersionInfoSize(FILE_PATH, C_Lpdwhandle)
If C_FileSize <= 0 Then '如果得不到文件长度或文件长度为0
Get_API_ERROR Err.LastDllError
GoTo inerr
End If
ReDim C_Data(1 To C_FileSize) '重定义文件字符数组,用于将文件内容考出
'得到文件相关信息
C_Lret = GetFileVersionInfo(FILE_PATH, C_Lpdwhandle, C_FileSize, C_Data(1))
If C_Lret = 0 Then
Get_API_ERROR Err.LastDllError
GoTo inerr
End If
C_VerSion = "\" '返回根块
C_Lret = VerQueryValue(C_Data(1), C_VerSion, C_LpBuffer, C_LpSize)
If C_Lret = 0 Then
GoTo inerr
End If
'将指针C_LpBuffer的内容拷贝导C_FF结构中
CopyMemory ByVal VarPtr(C_FF), ByVal C_LpBuffer, C_LpSize
'得到文件版本信息
C_Lup = CLng(C_FF.dwFileVersionMS / &H10000)
C_Llow = CLng(C_FF.dwFileVersionMS / &HFFFF&)
C_FVersion = CStr(C_Lup) & "." & CStr(C_Llow)
C_Lup = CLng(C_FF.dwFileVersionLS / &H10000)
C_Llow = CLng(C_FF.dwFileVersionLS / &HFFFF&)
C_FVersion = C_FVersion & "." & CStr(C_Lup) & "." & CStr(C_Llow)
C_FVersion = "文件版本: " & C_FVersion
'得到产品版本信息
C_Lup = CLng(C_FF.dwProductVersionMS / &H10000)
C_Llow = CLng(C_FF.dwProductVersionMS / &HFFFF&)
C_PVersion = CStr(C_Lup) & "." & CStr(C_Llow)
C_Lup = CLng(C_FF.dwProductVersionLS / &H10000)
C_Llow = CLng(C_FF.dwProductVersionLS / &HFFFF&)
C_PVersion = C_PVersion & "." & CStr(C_Lup) & "." & CStr(C_Llow)
C_PVersion = "产品版本: " & C_PVersion
'得到文件创建时间
C_FDataTime = "文件创建时间:" & FileDateTime(FILE_PATH)
'得到文件语言版本
C_VerSion = "\VarFileInfo\Translation"
C_Lret = VerQueryValue(C_Data(1), C_VerSion, C_LpBuffer, C_LpSize)
If C_Lret <> 0 Then
C_Lun = C_LpSize / 4
For i = 0 To C_Lun - 1
VBGetTarget C_ILunID, C_LpBuffer + 4 * i, 2
VBGetTarget C_ICodePage, C_LpBuffer + 4 * i + 2, 2
If C_ILunID = LANG_ENGLISH Then Exit For
Next i
Else
C_ILunID = &H409
C_ICodePage = &H4B0
End If
C_SLunID = Hex(C_ILunID)
Do While Len(C_SLunID) < 4
C_SLunID = "0" & C_SLunID
Loop
C_SCodePage = Hex(C_ICodePage)
Do While Len(C_SCodePage) < 4
C_SCodePage = "0" & C_SCodePage
Loop
C_VerSion = "\StringFileInfo\" & C_SLunID & C_SCodePage & "\CompanyName"
C_Lret = VerQueryValue(C_Data(1), C_VerSion, C_LpBuffer, C_LpSize)
If C_Lret = 0 Then
GoTo inerr
End If
C_CCompany = ""
For i = 1 To C_LpSize
C_CCompany = C_CCompany & Chr(C_Data(C_LpBuffer - VarPtr(C_Data(1)) + i))
Next
C_CCompany = "公司名称: " & C_CCompany
'显示结果
print
print C_FVersion
print C_PVersion
print C_FDataTime
print C_CCompany
inerr:
End Function
9 楼
tianyuan003 [专家分:3780] 发布于 2006-11-30 13:55:00
根据 VB 改编,你用 QB 编译运行了 么?
QB 能运行这个程序么?
10 楼
w1212q [专家分:660] 发布于 2006-11-30 16:13:00
应该可以吧;
我来回复