2013-08-08 5 views
0

필자는 Delphi에서 프로그램을 작성하고 일부 어셈블리 코드 (Pipes.pas)가 포함 된 라이브러리를 포함합니다. StdWndProc라는 함수를 호출하는 코드를 실행할 때 액세스 위반이 발생합니다. 이 프로세스는 어셈블리 코드가 포함 된 어셈블리 함수입니다.32 비트 어셈블리 코드를 64 비트 프로세서에서 실행할 수 있습니까? (Delphi)

유니 코드 지원 및 기타 항목을 포함하도록이 코드 (Pipes.pas)를 업데이트했지만이 어셈블리의 기능을 파악하지 못했습니다. 여기에 무슨 일이 생길지에 대한 아이디어가 있습니까?

64 비트 컴퓨터에서 실행 중이므로이 어셈블리가 32 비트이고 64 비트 프로세서에서 제대로 실행되지 않을 수 있습니까? 프로젝트는 32 비트 빌드를 대상으로합니다.

+6

32 비트 응용 프로그램 용으로 컴파일 할 경우, 32 비트 어셈블리가 작동합니다 32 비트 타겟에서 32 비트 어셈블리를 사용하는 델파이 RTL의 주요 부분이 있습니다. 64 비트 빌드를 대상으로하고 32 비트 라이브러리를 사용하려는 경우 분명히 작동하지 않습니다. 당신이 받고있는 * 정확한 * 오류 메시지를 제공하기 위해 질문을 편집 할 수 있습니까? "액세스 위반이 발생했습니다."는 사용하기에는 너무 모호합니다. –

+0

나는 끔찍한 의혹을 가지고 있습니다 ... 어떤 버전의 델파이를 사용하여 코드를 컴파일합니까? 코드 작성에 사용 된 것과 동일한 것입니까? Delphi 2009에서 유니 코드 지원이 기본 옵션이되었으므로 2009 년 이후에는 이전 Delphi 코드를 버전으로 마이그레이션하는 데 추가 작업이 필요합니다. 자세한 내용은 [link] (http://edn.embarcadero.com/article/40307) – mg30rg

+0

을 참조하십시오. 사용중인 Delphi 버전에 태그를 포함하십시오. 가능하다면 문제에 더 구체적으로 대응하십시오 : 어떤 상황에서 충돌이 발생하고 어떤 상황에서 제대로 작동하는지. 'pipes.pas'를 직접 작성 했습니까 아니면 변경 만 했습니까? –

답변

7

32 비트 프로세스는 32 비트 코드를 실행합니다. 이 코드가 어셈블러 또는 델파이 또는 다른 언어로 컴파일되었는지는 중요하지 않습니다.

기계가 64 비트인지 32 비트인지, 32 비트 프로세스가 32 비트 코드인지는 중요하지 않습니다. 64 비트 시스템에서 32 비트 프로세스는 WOW64라는 에뮬레이트 된 32 비트 시스템에서 실행됩니다.

당신이 시도한 것은 개념적으로 가능하므로 결론은 당신의 코드에 버그가 있다는 것입니다.

2

David Heffernan은 문제의 원인이 OS 아키텍처가 될 수 없다고 지적했습니다.

코드가 32 비트 컴퓨터에서 오류없이 실행되지만 64 비트 컴퓨터에서 실행되지 않으면 OS 문제 일 수 있습니다. 이것은 32 비트 전용 디렉토리 (예 : SD : \ Program Files, 32 비트 프로그램의 경우 64 비트 창에서 SD : \ Program Files (x86)), 레지스트리 리플렉션 귀하의 프로그램이 Wow3264Node 키 아래에 레지스트리 데이터를 저장하게하거나 심지어 오래된 16 비트 DLL (wow3264에서 실행할 수 없음)을 사용하지만, 2013 년 이후로 매우 드문 경우입니다 ...

도움을 드릴 수 있도록 코드 이 정확히 실행되지 않습니다..

는 는 (원래의 질문에 이미 답 것을 유의하시기 바랍니다, 나는 단지 좀 더 유용한 도움을 제공하고 싶었다.)

관련 문제