비트 단위 & 연산자를 사용하면 다음과 같이 사용해야하는 것입니다 : CONST INT MASK_SYNTAX_ERR = -2146827000; if (MASK_SYNTAX_ERR & scode! = 0) scriptError.GetSourceLineText (out sourceLine);
무슨 일인지 자세히 알아보십시오.
MASK_SYNTAX_ERR의 이진 표현은
1000 0000 0000 1010 0000 0101 0000 1000
이 비교는 동일한 위치에 하나의있는 모든 숫자에 대해 true를 반환 것입니다. 첫 번째 구문 오류 코드는 다음과 같습니다.
MASK 1000 0000 0000 1010 0000 0101 0000 1000
CODE 1000 0000 0000 1010 0000 0011 1110 1111
& 1000 0000 0000 1010 0000 0001 0000 1000 != 0
그래서 여기에서 마스크가 작동합니다. 이제 논리 오류 코드를 비교해보십시오 :
MASK 1000 0000 0000 1010 0000 0101 0000 1000
CODE 1000 0000 0000 1010 0001 0011 1000 1111
& 1000 0000 0000 1010 0000 0001 0000 1000 != 0
또한 여기서는 작동하지 않습니다. 너무 복잡하기 때문에 추측 한 마스크가 잘못되었을 수도 있습니다. 함께 귀하의 구문 코드와 로직 코드를 보면 : 왼쪽에서 13 비트 논리 오류 및 구문 오류 사이의 키 차이가 같은
SYNTAX 1000 0000 0000 1010 0000 0011 1110 1111
1000 0000 0000 1010 0000 0011 1111 0001
1000 0000 0000 1010 0000 0011 1111 0000
1000 0000 0000 1010 0000 0011 1110 1101
1000 0000 0000 1010 0000 0011 1110 1100
LOGIC 1000 0000 0000 1010 0001 0011 1000 1111
1000 0000 0000 1010 0001 0011 1001 0001
것 같습니다. 그래서 다음과 같이 할 수 있습니다 :
const int SYNTAX_MASK = 1 << 12;
if (scode & SYNTAX_MASK != 0)
{
//It's a syntax error
scriptError.GetSourceLine(out sourceLine);
}
else
{
//It's a logic error
}
다른 분석을 위해 유사한 분석을 사용할 수 있습니다. 많은 경우, 마스크는 int에서 하나의 비트를 잡는 데 사용됩니다. 코드의 0x800A 부분은 특정 종류의 오류를 의미하고 마지막 부분은 오류에 대한 정보를 제공 할 수 있습니다. 당신은 스스로 약간의 실험을해야 할 것이지만, 희망적으로 이것이 비트 마스크를하는 올바른 길로 나아갈 것입니다.
다음은 COM 오류 코드가 어떻게 구성되는지 설명합니다 - http://msdn.microsoft.com/en-us/library/bb401631.aspx. –
아, 감사합니다. 알렉세이. 그것은 아마도 가장 유용한 것입니다. –