用VB建立了一个DLL,代码如下:
模块:basPub.bas
Option ExplicitPublic Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End TypePublic Const FILE_MAP_WRITE = &H2
Public Const PAGE_READWRITE = &H4
Public Const MEMPAGE = &HFFFFFFFF
Public Declare Function CreateFileMapping Lib "kernel32" Alias "CreateFileMappingA" (ByVal hFile As Long, lpFileMappigAttributes As SECURITY_ATTRIBUTES, ByVal flProtect As Long, ByVal dwMaximumSizeHigh As Long, ByVal dwMaximumSizeLow As Long, ByVal lpName As String) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Declare Function MapViewOfFile Lib "kernel32" (ByVal hFileMappingObject As Long, ByVal dwDesiredAccess As Long, ByVal dwFileOffsetHigh As Long, ByVal dwFileOffsetLow As Long, ByVal dwNumberOfBytesToMap As Long) As Long
Public Declare Function UnmapViewOfFile Lib "kernel32" (lpBaseAddress As Any) As Long
Public Declare Function OpenFileMapping Lib "kernel32" Alias "OpenFileMappingA" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal lpName As String) As Long
Public Declare Function GetLastError Lib "kernel32" () As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long类:clsFileTest
Option ExplicitDim fMapHandle As Long
Dim pFileMap As LongPrivate Sub Class_Initialize() Dim TemSa As SECURITY_ATTRIBUTES
Dim TemLng As Long
TemSa.bInheritHandle = 1
TemSa.lpSecurityDescriptor = 0
TemSa.nLength = Len(TemSa) fMapHandle = CreateFileMapping(MEMPAGE, TemSa, PAGE_READWRITE, 0, 128, "CQSL_MapFile" & "map")
If fMapHandle = -1 Then
MsgBox "文件MAP失败!"
Exit Sub
End If
pFileMap = MapViewOfFile(fMapHandle, FILE_MAP_WRITE, 0, 0, 0)
MsgBox fMapHandle
MsgBox pFileMap
TemLng = GetLastError
If TemLng <> 0 Then
MsgBox TemLng
End IfEnd SubPrivate Sub Class_Terminate() '释放对象
If pFileMap <> 0 Then
UnmapViewOfFile pFileMap
End If If fMapHandle <> 0 Then
CloseHandle fMapHandle
End IfEnd SubPublic Function SetOne(ByVal WhichData As Long) As Long CopyMemory pFileMap, WhichData, 4End FunctionPublic Function GetOne() As Long Dim TemLng As Long CopyMemory TemLng, pFileMap, 4
GetOne = TemLngEnd Function建立测试程序1:
Option Explicit
Dim TemF As clsFileTestPrivate Sub Command1_Click()
TemF.SetOne Val(Text1.Text)End SubPrivate Sub Command2_Click() Text2.Text = TemF.GetOneEnd SubPrivate Sub Form_Load() Set TemF = New clsFileTestEnd Sub建立测试程序2:
Option Explicit
Dim TemF As clsFileTestPrivate Sub Command1_Click()
TemF.SetOne Val(Text1.Text)End SubPrivate Sub Command2_Click() Text2.Text = TemF.GetOneEnd SubPrivate Sub Form_Load() Set TemF = New clsFileTestEnd Sub在任意测试程序按Command1后,再在两个测试程序中按按钮2,结果得到的数据不一样,请问是哪里的问题呢?
模块:basPub.bas
Option ExplicitPublic Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End TypePublic Const FILE_MAP_WRITE = &H2
Public Const PAGE_READWRITE = &H4
Public Const MEMPAGE = &HFFFFFFFF
Public Declare Function CreateFileMapping Lib "kernel32" Alias "CreateFileMappingA" (ByVal hFile As Long, lpFileMappigAttributes As SECURITY_ATTRIBUTES, ByVal flProtect As Long, ByVal dwMaximumSizeHigh As Long, ByVal dwMaximumSizeLow As Long, ByVal lpName As String) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Declare Function MapViewOfFile Lib "kernel32" (ByVal hFileMappingObject As Long, ByVal dwDesiredAccess As Long, ByVal dwFileOffsetHigh As Long, ByVal dwFileOffsetLow As Long, ByVal dwNumberOfBytesToMap As Long) As Long
Public Declare Function UnmapViewOfFile Lib "kernel32" (lpBaseAddress As Any) As Long
Public Declare Function OpenFileMapping Lib "kernel32" Alias "OpenFileMappingA" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal lpName As String) As Long
Public Declare Function GetLastError Lib "kernel32" () As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long类:clsFileTest
Option ExplicitDim fMapHandle As Long
Dim pFileMap As LongPrivate Sub Class_Initialize() Dim TemSa As SECURITY_ATTRIBUTES
Dim TemLng As Long
TemSa.bInheritHandle = 1
TemSa.lpSecurityDescriptor = 0
TemSa.nLength = Len(TemSa) fMapHandle = CreateFileMapping(MEMPAGE, TemSa, PAGE_READWRITE, 0, 128, "CQSL_MapFile" & "map")
If fMapHandle = -1 Then
MsgBox "文件MAP失败!"
Exit Sub
End If
pFileMap = MapViewOfFile(fMapHandle, FILE_MAP_WRITE, 0, 0, 0)
MsgBox fMapHandle
MsgBox pFileMap
TemLng = GetLastError
If TemLng <> 0 Then
MsgBox TemLng
End IfEnd SubPrivate Sub Class_Terminate() '释放对象
If pFileMap <> 0 Then
UnmapViewOfFile pFileMap
End If If fMapHandle <> 0 Then
CloseHandle fMapHandle
End IfEnd SubPublic Function SetOne(ByVal WhichData As Long) As Long CopyMemory pFileMap, WhichData, 4End FunctionPublic Function GetOne() As Long Dim TemLng As Long CopyMemory TemLng, pFileMap, 4
GetOne = TemLngEnd Function建立测试程序1:
Option Explicit
Dim TemF As clsFileTestPrivate Sub Command1_Click()
TemF.SetOne Val(Text1.Text)End SubPrivate Sub Command2_Click() Text2.Text = TemF.GetOneEnd SubPrivate Sub Form_Load() Set TemF = New clsFileTestEnd Sub建立测试程序2:
Option Explicit
Dim TemF As clsFileTestPrivate Sub Command1_Click()
TemF.SetOne Val(Text1.Text)End SubPrivate Sub Command2_Click() Text2.Text = TemF.GetOneEnd SubPrivate Sub Form_Load() Set TemF = New clsFileTestEnd Sub在任意测试程序按Command1后,再在两个测试程序中按按钮2,结果得到的数据不一样,请问是哪里的问题呢?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货