次のように作成されたビットマップをクリアするために 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 を使用します