回 帖 发 新 帖 刷新版面

主题:[讨论]QB vs VB

一:split函数 QB < VB 
二:Data语句 QB > VB
三:环境 QB < VB
四:编译 QB > VB
五:限制 QB < VB
QB Y 2,S 3
VB Y 3,S 2

回复列表 (共12个回复)

沙发

问题是
现在要处理的数据那么多
用data去输入不实际
再一个编译问题
计算机处理速度很快
可以忽略不计

板凳


to lou 1:
found! ?
not Basic ?
not Error ?
File in DayFeatHer ? ? ?

3 楼

楼主多看点基础的书吧.
QB 和 VB 的根本差别不在你列举的那些东西里.
QB 和 VB 的区别就象 80286 和奔腾的区别一样.一个是为 80286 上面的 DOS 系统设计的,另一个是为奔腾等 CPU 上运行的 WINDOWS 系统设计的.

4 楼


回3楼;
女中豪杰啊;

5 楼

移位函数;
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 楼

查看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 楼

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 楼

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 楼

根据 VB 改编,你用 QB 编译运行了 么?
QB 能运行这个程序么?

10 楼


应该可以吧;

我来回复

您尚未登录,请登录后再回复。点此登录或注册