2009-06-09 9 views
3

C++ COM 개체를 사용하는 C# 응용 프로그램은 모두 32 비트 컴퓨터에서 작성됩니다. 이제 64 비트 컴퓨터에서 실행해야합니다. COM 객체를 등록했습니다. 해당 항목이 computer \ hkey_classes_root \ wow6432node \ clsid {xxx} 아래의 등록 정보에 작성되었습니다. 그러나 응용 프로그램을 실행하려고하면 "CLSID {xxx}가있는 구성 요소의 COM 클래스 팩토리를 검색하는 중 다음 오류로 인해 실패했습니다 : 80040154.". 알다시피, 오류 코드는 클래스가 등록되지 않았 음을 의미합니다. 제발, 도와주세요! 감사합니다64 비트 Windows 컴퓨터에서 32 비트 COM을 사용하여 32 비트 응용 프로그램 실행

답변

4

첫 번째 대답은 위의 정답입니다. 32 비트 COM 구성 요소를 참조하는 경우 64 비트 Windows에서 CPU ANY 대상 응용 프로그램을 실행할 수 없습니다. 로드되지 않습니다.

JIT가 CPU ANY를 (를)보고 응용 프로그램을 64 비트로 승격시키고 있습니다. 그러나 com 컨트롤의 64 비트 버전이 없으므로 등록되지 않은 오류가 발생합니다.

이 문제는 데이터베이스에 Microsoft Access를 사용하는 사람들에게 큰 문제입니다. 64 비트 버전의 Access가 없으므로 오류가 발생하면 64 비트 런타임 (존재하지 않음)이 필요하다고 생각합니다. Access 런타임을 사용하려면 앱을 32 비트로만 플래그해야합니다.

이것은 잘못된 선택입니다 (IMHO) - 64 비트 버전을 가진 더 나은 구성 요소를 찾고 100 % 관리 코드로 이동하십시오.

정말로 필요한 경우가 아니면 모든 태그 앱을 32 비트로 좋아하지 않습니다.

+0

먼저 감사합니다. 나는 x86으로 응용 프로그램을 다시 빌드하고 com 개체를 발견했습니다. 이제는 x86으로 의존하는 모든 라이브러리를 다시 빌드해야하는지 궁금합니다. x86 구성에서 응용 프로그램 만 빌드하면 충분합니까? 아니면 모든 종속성을 x86으로 빌드해야합니까? 다시 한번 감사드립니다! –

+1

일반적으로 실행되는 앱 도메인 (주 애플리케이션)은 애플리케이션의 비트 크기를 결정합니다. 주 앱이 x86 인 경우 JIT는 일반적으로 64 비트 미만의 항목을 홍보하지 않습니다. 하지만로드하는 방법에 따라 달라질 수 있습니다. 안전을 위해 모든 x86 플래그를 지정할 수 있습니다. –

2

C# 응용 프로그램은 x64 컴퓨터에서 64 비트 모드로 실행되는 모든 CPU 대상으로 컴파일되었을 수 있습니다. 64 비트 프로세스는 32 비트 프로세스에 액세스 할 수 없습니다.

Visual Studio에서 32 비트 전용 응용 프로그램으로 강제 컴파일 할 수 있습니다. 그것은 프로젝트 속성, 빌드 탭, 플랫폼 대상 드롭 다운에 있습니다. x86으로 설정하십시오.

32 비트 응용 프로그램으로 실행하는 다른 방법이있을 수 있지만 잘 모르겠습니다.

0

64 비트 시스템에서 32 비트 앱을 기본적으로 실행할 수 있다고 생각하지 않습니다. 응용 프로그램을 64 비트 바이너리로 컴파일하거나 에뮬레이터 (예 : Windows의 WOW64)에서 실행해야합니다. 64 비트 바이너리로 빌드 된 앱이 외부 dll을 사용하는 경우, 모든 dll의 64 비트 버전이 필요합니다.

여기에 좋은 참고이다 :

http://searchwindowsserver.techtarget.com/tip/0,289483,sid68_gci1220022,00.html

편집 :

프로젝트의 속성에 가면

-> 빌드 X86에 "모든 CPU"에서 플랫폼의 대상을 변경합니다. 이것이 도움이되는지 확인하십시오.

은 또는 당신은 당신의 DLL을 등록해야합니다 : http://riteshk.blogspot.com/2007/05/retrieving-com-class-factory-failed-due.html

2

.NET 런타임은 자동으로 응용 프로그램을 64 비트로 실행하며 더 이상 32 비트 COM 구성 요소를 해당 프로세스로로드 할 수 없습니다.

COM 구성 요소에 자동화 호환 인터페이스가 있으면 해결 방법이 매우 간단합니다. COM + 응용 프로그램 (제어판 -> 관리 도구 -> 구성 요소 서비스)을 만들고 구성 요소를 추가합니다. 이 방법을 사용하면 별도의 프로세스에서 구성 요소를 강제 생성하므로 클라이언트 응용 프로그램이 64 비트 응용 프로그램으로 실행되는 것을 더 이상 고려하지 않게됩니다.

관련 문제