2011-03-23 2 views
1

Visual Studio 2008 사용 .Net Framework 2.0을 대상으로하는 COM 개체를 작성했습니다..NET 구성 요소 - 런타임에 바인딩을 사용할 때의 오류

XP SP3의 MS Access 2007에서이 구성 요소를 사용하려고합니다. 초기 바인딩을 사용하면 완벽하게 작동합니다. 내가 후기 바인딩을 사용하는 경우이 오류를 얻을 :

Dim objTest as Object 
Set objTest = CreateObject("MyComNameSpace.MyComClass") 'Error occurs here 

답변

2

그럼 PROGID가 아니다 "MyComNameSpace.MyComClass"과 같습니다

Run-time error '429': 
ActiveX component can't create object 

여기 내 코드입니다. 레지스트리에서 Regedit.exe를 보면 HKEY_CLASSES_ROOT에 있어야합니다. 키에는 클래스에 대한 GUID가있는 CLSID 키가 들어 있습니다. 이 키는 HKLM\Software\Classes\CLSID\{guid}에 있어야합니다. Regasm.exe에서 CLR을 시작하고 어셈블리를로드하기 위해 작성한 키가 들어 있습니다.

SysInternals 'ProcMon 유틸리티를 사용하여 COM 클라이언트 프로그램에서 이러한 키를 검색 할 수 있습니다. 누락 된 부분을 진단 할 수있는 적절한 방법입니다.

[ProgId] 특성을 사용하여 .NET으로 가져 오는 대신 자신의 것을 선택할 수 있습니다.

후기 바인딩을 사용한다고해서 등록 단계를 건너 뛸 수있는 것은 아닙니다. 승격 된 명령 프롬프트에서/codebase 옵션을 사용하여 Regasm.exe를 실행하여 등록 된 키를 가져와야합니다.

+0

감사합니다. 나는 레지스트리를 점검했고 거기에 다음과 같이 나타나고있다 : MyComNameSpace.MyComNameSpace.MyComClass 나는 그것을 지금 사용하기로 결정했고 그것은 훌륭하게 작동한다. 이제 서버/네임 스페이스 이름을 두 번 연속해서 사용하게했을지 궁금합니다. – HK1

+0

왜 내 네임 스페이스가 두 배가되는지 알아 냈습니다. MyComNameSpace라는 별도의 파일에 모든 코드를 넣었습니다. 문제가 해결되었습니다. – HK1