FIX: C2443 Using Structure Member Operand in _asm Block (125799)
The information in this article applies to:
- Microsoft Visual C++, 32-bit Editions 1.0
- Microsoft Visual C++, 32-bit Editions 2.0
- Microsoft Visual C++, 32-bit Editions 2.1
- Microsoft Visual C++, 32-bit Editions 4.0
- Microsoft Visual C++, 32-bit Editions 4.1
- Microsoft Visual C++, 32-bit Enterprise Edition 4.2
- Microsoft Visual C++, 32-bit Professional Edition 4.2
- Microsoft Visual C++, 32-bit Enterprise Edition 5.0
- Microsoft Visual C++, 32-bit Professional Edition 5.0
- Microsoft Visual C++ for Windows, 16-bit edition 1.0
- Microsoft Visual C++ for Windows, 16-bit edition 1.5
- Microsoft Visual C++ for Windows, 16-bit edition 1.52
This article was previously published under Q125799 SYMPTOMS
Under the four conditions described in this article, the following compiler
error is generated:
test.cpp(linenumber) : error C2443: operand size conflict
Here linenumber is the assembly instruction in TEST.CPP file that
meets the following conditions. This error occurs when the following four
conditions are met:
- You're using inline assembly.
- The size of the source operand on an assembly instruction is different
from the size of the destination operand.
- The source operand is a member of a structure.
- The PTR operator is used to force the operand to the size required.
RESOLUTION
If you are using C++, declare a reference variable initialized with the
structure member. Use the reference variable as the source operand in the
assembly instruction as shown in this sample code:
Sample Code
/* Compile options needed: /Tp
*/
truct Test
{
int nInt;
} test1;
void main(void)
{
__asm mov bh, BYTE PTR test1.nInt /* error occurs here */
int & nTest = test1.nInt; /* these lines work */
__asm mov bh, BYTE PTR nTest /* these lines work */
}
If you are using C, use a local variable instead of a reference variable.
STATUSThis bug was corrected in Microsoft Visual C++, version 6.0.
Modification Type: | Minor | Last Reviewed: | 7/5/2005 |
---|
Keywords: | kbBug kbfix kbVC600fix KB125799 |
---|
|