我注意到RTL Move 内存似乎工作得很好。但是当我尝试使用RTL Copy Memory时,我得到:“在kernel32中找不到DLL入口点RtlCopyMemory”。这是我的声明:
Private Declare Sub CopyMem Lib "kernel32" Alias "RtlCopyMemory" ( _
ByVal dest As Long, _
ByVal source As Long, _
ByVal bytLen As Long)
答案 0 :(得分:5)
RtlCopyMemory
是provided inline。它在winnt.h
中定义为memcpy
。这意味着它不包含在Win32 DLL中,它是C运行时库的一部分。您可以尝试从memcpy
导入c:\windows\system32\msvcrt.dll
。
答案 1 :(得分:3)
为什么不使用RtlMoveMemory
?它的工作方式与RtlCopyMemory
类似,只是它以不同的方式处理重叠的内存。
Bruce McKinney pioneered使用RtlMoveMemory超过10年,从那以后它一直是standard用于VB6内存复制。
答案 2 :(得分:1)
我知道这是一个老问题,但我遇到了同样的问题,所以我想我可以回答。
kernel32.dll中的RtlCopyMemory应该是Export Forward到ntdll, 但不知何故,人们在MS missed that one <罢工>的x64版Vista上(不知道它是如何在x86上)(见下文)。
如果只是出于您的需要,您可以尝试直接从ntdll导入它。
编辑:我的意思是不导出方法,但是使用符号它在ntdll中可以看作 RtlCopyMemoryNonTemporal
EDIT2:只是为了确定我已经检查了一些事情,这里是摘要:
如果您正在编写x64应用程序,那么一切都应该如此。
P.S。我错了x64 vs x86,因为我正在编译x86应用程序,并在x64上运行它(WOW模式), 所以它使用了32位版本的kernel32,ntdll而不是x64版本。