gpt4 book ai didi

C++ SHFileOperation 64位操作系统

转载 作者:行者123 更新时间:2023-11-30 19:36:47 25 4
gpt4 key购买 nike

这个旧的 C++ 函数适用于 32 位操作系统,但不适用于 64 位操作系统。我想复制文件夹。你知道我必须改变什么吗?

    ************** Exception Text **************
System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at WindowsApplication1.FolderCopy.SHFileOperation(SHFILEOPSTRUCT& lpFileOp)
at WindowsApplication1.FolderCopy.CopyFolder(String strSource, String strTarget)
at WindowsApplication1.Form1.Restore()
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

这是函数:

    'Declaration of the API
Private Declare Function SHFileOperation Lib "shell32.dll" Alias _
"SHFileOperationA" (ByRef lpFileOp As SHFILEOPSTRUCT) As Integer
#End Region

Public Shared Function CopyFolder(ByVal strSource As String, ByVal strTarget As String) As Boolean
Dim _ShFile As New SHFILEOPSTRUCT
Dim lngUsedFlags As Long
lngUsedFlags = lngUsedFlags Or FO_Func.FOF_NOCONFIRMATION
lngUsedFlags = lngUsedFlags Or FO_Func.FOF_NOCONFIRMMKDIR
lngUsedFlags = lngUsedFlags Or FO_Func.FOF_NOCOPYSECURITYATTRIBS
lngUsedFlags = lngUsedFlags Or FO_Func.FOF_NOERRORUI

_ShFile.wFunc = FO_Func.FO_COPY
_ShFile.fFlags = lngUsedFlags
_ShFile.pFrom = strSource & vbNullChar
_ShFile.pTo = strTarget & vbNullChar
If SHFileOperation(_ShFile) = 0 Then
Return True
Else
Return False
End If
End Function

最佳答案

我认为问题出在 hNameMappings 字段上。该字段的 C 声明是 LPVOID hNameMappings ,它可能是 4 或 8 字节,具体取决于架构(32 位与 64 位)。我认为您需要为该字段使用 IntPtr 类型,因为 IntPtr 在 32 位中为 4 个字节,在 64 位中为 8 个字节。但是我不确定字符串字段会发生什么,因为这些指针在 64 位的情况下也会增长。但是您可以开始检查对 hNameMappings 字段使用 IntPtr 是否有效。

关于C++ SHFileOperation 64位操作系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40463208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com