2011-01-07 2 views
2

내가 VS2010에서 열린 미세 컴파일 된 VS6에서 만든 C++ 프로젝트가 있습니다. 나는 시도하고 VS2010에서 새로운 MFC C++ 프로젝트를 만들고 위의 어셈블리 코드와 클래스를 추가 할 때까지,Visual Studio 2010은 Visual Studio 6처럼 C++의 인라인 어셈블리를 컴파일합니까?

__asm{ 
    mov eax,this 
    mov esi,[eax].m_pImage 
    ... 

모든 벌금과 멋쟁이에는 다음과 같은 코드를 포함 인라인 어셈블리의 비트와 함께 클래스가 포함되어 있습니다. __asm의 새로운 해석은 다음과 같이 될 코드를 필요로 갑자기,이 컴파일되지 않습니다 (또는 비슷한, 이것은 어떤 경우 컴파일) :

__asm{ 
    mov eax,this 
    mov esi,[eax]this.m_pImage 
    ... 

을 이제 내 인생, 내가 알아낼 수 없습니다 VS2010에서 변환 된 VS6 프로젝트에서 (현재 유효하지 않은 것으로 추정되는) 인라인 어셈블리 코드를 컴파일 할 수있는 두 프로젝트 사이의 차이점을 확인하십시오.

어딘가에 하나가 된 VS6 컴파일러를 사용 할 수있는 (숨겨진) 설정이 있습니까?

+0

를 사용하는 이유 인라인 어셈블러? – Puppy

답변

2

VS6 인라인 ASM은 고정 버그처럼 보인다. 나는 컴파일러가 m_pImageeax 레지스터에로드 된 것을의 일원이었다 따라서 오프셋 찾을 수 있는지 확인 수 있는지 확실하지이기 때문에 말한다. 귀하의 질문에 대답하기 위해, 내가 알고있는 VSM 컴파일러에서 오래된 ASM 의미를 사용하는 방법은 없습니다.

내가 인라인 ASM 이외의 지역 변수를 만드는 대신 esi에 그를 할당합니다.

void * pointer = this.m_pImage; 
__asm 
{ 
    mov ebx, pointer 
    mov esi, ebx 
    ... 
+1

프로젝트를 VS6 (및 유일한 VS6 - 다른 버전에서는 발생하지 않음)에서 변환하면 다양한 호환성 설정이 적용됩니다. 이 버그 수정이 추가되었지만 이전 코드 패턴이 VS6 호환 모드에서 계속 사용되고있을 가능성이 큽니다. –

+0

그리고 이러한 호환성 설정을 복제 할 방법이 없습니까? – Daan

+0

그 마지막 코멘트를 무시하십시오 ... 대답과 빌리의 코멘트를 다시 읽으면, 우리는 버그가있는 레거시 VS6 코드를이 시대에도 여전히 사용하고 싶지 않아야한다는 것을 분명히 알게됩니다. – Daan

관련 문제