샘플 C# COM-Visible DLL을 개발했습니다.
x86에서 빌드되고 32 비트 Regasm을 통해 등록되면 COM 클라이언트에서 잘 실행됩니다.
64 내장 및 64 비트 RegAsm을 통해 등록은 COM 클라이언트 호출은 다음과 같은 오류 방울 :문제 COM interop 용 x64 어셈블리 등록
Retrieving the COM class factory for component with CLSID {A0F2F58F-7B98-3605-BEC9-84724FF1E824} failed due to the following error: 80040154.
내가 확인하고 CLSID가 HKCR \ CLSID 아래에있는 레지스트리에 실제로 존재 함을 확인했다. 다음은
은 C#을 통해 COM 액세스를 시뮬레이션의 예입니다var type = Type.GetTypeFromProgID("ProgID.Interop.5683");
var obj = Activator.CreateInstance(type); // <-- blows here
나는 또한 PROGID 문제는 액티베이터 정확히 찾고있다 를 통해 유형에 성공적으로 액세스가 있음을 procmon를 통해 확인 ? 내 x64 등록 어셈블리를 "볼"수있는 방법은 무엇입니까? 어딘가에 추가해야 할게있어?
x86 재 빌드를 권고하는 많은 "솔루션"을 발견했습니다. 그러나 Come'on! 나는 그 일을하지 않고 COM을 위해서 x64 혜택을 모두 잃을 것입니다. 거기에 "진짜"해결책이 있습니까?
어떤 상황에서 80040154 오류가 발생합니까? –
@Ramhound CLSID가 적절한 위치에 없거나 없을 때. 그래서 나는 매우 혼란스러워. –
특정 아키텍처에 대한 관리되는 DLL을 빌드하지 않고 EXE 프로젝트 설정 만 중요합니다. 고전적인 실수는 Regasm.exe의 잘못된 비트를 사용하거나/codebase 옵션을 잊어 버리는 것입니다. SysInternals의 ProcMon 유틸리티로 문제를 해결하십시오. –