2011-04-18 2 views
2

내 .Net 웹 응용 프로그램에서 COM DLL을 사용하고 있습니다. 이것은 여러 다른 컴퓨터에서 잘 작동합니다.
그러나 특정 컴퓨터에서 다음 오류가 발생합니다.COM 예외 - TYPE_E_CANTLOADLIBRARY?

'CServer.CApplicationClass'형식의 COM 개체를 인터페이스 유형 'CServer.ICApplication'으로 캐스팅 할 수 없습니다. 다음 오류로 인해 IID '{CF0DFA28-046B-4C7D-8AA9-F4B7477D8CAE}'인터페이스의 COM 구성 요소에서 QueryInterface 호출이 실패했기 때문에이 작업이 실패했습니다. 형식 라이브러리/DLL을로드하는 동안 오류가 발생했습니다. (HRESULT 예외 : 0x80029C4A (TYPE_E_CANTLOADLIBRARY)).

regsvr32 명령을 사용하여 DLL을 등록했습니다.
이 DLL에 대한 COM + 응용 프로그램도 만들었습니다. 레지스트리를 통한 검색 실행
나는 여러 곳에서 키를 찾을 수 있습니다. 나는 또한 dll을 등록 해제하고이 dll에 컴퓨터에 모든 referneces를 삭제하는 시도했다. 그리고 나서 dll을 다시 추가하고 다시 등록하십시오.

나는 dll을 테스트하는 간단한 windows 스크립트 파일을 작성했습니다. 이것은 잘 작동합니다. 그러나 iis에서 실행중인 .net 프로젝트에 문제가 있습니다.

누구? .. 이것 좀 도와 줄래

당신은 코멘트를 남겨주세요 더 이상 정보가 필요하면

. 감사.

+1

귀하의 서버는 무엇입니까? x64/x86? 귀하의 응용 프로그램 풀은 무엇입니까? 어떤 COM 어셈블리가 구축 되었습니까? –

+0

Windows 7 Professional 64 비트 .. 응용 프로그램 풀이 .NET Framework v2.0.50727로 설정된 응용 프로그램 풀로 설정되었습니다. COM 어셈블리는 내 응용 프로그램이 델파이로 작성된 레거시 코드를 호출 할 수 있도록 구축되었습니다. – shane87

+0

설치 한 첫 번째 64 비트 서버입니까? –

답변

0

AppPool이 x86으로 설정되어 있는지 확인하십시오. 또한 어셈블리가 x86 만 대상으로되어 있는지 확인하십시오.

+0

응용 프로그램 풀에서 32 비트 응용 프로그램을 활성화 할 수 있습니까? – shane87

+0

옙 ............ –

+0

불행히도 그 didnt 일 :( – shane87

0

비슷한 문제가있었습니다. 처음에 액세스가 거부되었습니다. 주변을 둘러보고 해결 된 후에는이 오류 메시지 (TYPE_E_CANTLOADLIBRARY)가 발생합니다. 내 직장 동료, 레지스트리 덤비는해야하므로 약간의 헛된 시도 후 윈도우 7

에 COM + 구성 요소를 실행하는거야 것을 마음 나는 그것을 받고 실행하는 방법을 발견 : 등록 취소)

일을 당신의 DLL (에 regsvr32 -u Dllname을)

2) DLL에 당신의 참조가

3) 구성 요소 서비스에 빈 COM + 응용 프로그램 (서버 응용 프로그램)을 작성) (백업 첫 레지스트리 정리되어 있는지 확인

4) Co 평 클립 보드

5)에 응용 프로그램 ID는 이동 "C : \ 프로그램 파일 (86) \ COMPLUS 응용 프로그램"및

6) 해당 폴더로 DLL을 복사하여 클립 보드에 ID로 폴더를 생성 등)이

(7)을 등록하여 구성 요소 서비스로 이동하고에 DLL을 사용하여 만든 응용 프로그램에 구성 요소를 추가 "C : \ 프로그램 파일 (86) \ COMPLUS 애플리케이션 {* 응용 프로그램 ID *}"

그것은 나를 위해 그것을했다. 희망이 도움이됩니다.

0

"TYPE_E_CANTLOADLIBRARY"메시지와 비슷한 문제가있었습니다.

배경 : 나는 Interop.ReferenceA.dll을 사용하는 프로젝트를 가졌습니다. 이 파일은 tlbimp ReferenceA를 사용하여 작성되었습니다.dll/out : Interop.ReferenceA.dll.

솔루션 : 나는 ReferenceA.dll는 IID 오류 메시지에 표시된이었다 서브 클래스를했다 것으로 나타났습니다 RegDllView를 사용 ReferenceA.dll를 살펴했다 . 서브 클래스의 소스 코드를 둘러보고 Interop.ReferenceB.dll에 종속되어 있음을 확인했습니다.

Interop.ReferenceB가 작동하는 타입 라이브러리로 필요한 서브 클래스라는 것을 알게되었습니다.

RegAsm을 /tlb:Interop.ReferenceB.tlb Interop.ReferenceB.dll (RegAsm을 32 비트 버전이 사용되었다.)

그리고 오류가 도망 갔어요 : 그래서이 달렸다.