我正在使用 asm insert 来清除位图,它是这样创建的:
CreateDIBSection(m_dc, &bmpinfo, DIB_RGB_COLORS, (void **)&m_bmp_data, NULL, NULL);
asm 插入 ( C++ )
int c = RGB32(color.r, color.g, color.b);
int length = m_width * m_height;
__asm
{
mov edi, m_bmp_data
mov ecx, length
mov eax, c
rep stosd
}
此代码引发访问冲突错误。但如果我这样做 - 一切都好:
BYTE* dest = m_bmp_data;
__asm
{
mov edi, dest
...
这个和解有什么区别?
更新: 使用“mov edi,m_bmp_data”它翻译为“mov edi,10h”。为什么是 10 小时?“mov edi, dest”翻译成“mov edi, dword ptr [dest]”。真的,我不知道如何将 memset 与整数值一起使用,所以我只使用内联 asm