2016-07-14 2 views
0

나는 정말로 dll에 대해 아무것도 모른다는 말로 시작하겠습니다. 오래된 MS 응용 프로그램을 상속 받았으며 VS2015에서 실행하려고합니다. 나는 코드에서 참조 된이 하나의 dll을 제외하고는 솔루션을 변환하고 모든 설정을 올바르게 할 수 있다고 확신한다. 제공된 Interop dll에 대한 참조를 만들고 "interop interop types"속성을 false로 설정해야한다는 것을 알았습니다. 이 모든 오류를 만족하고 프로젝트를 구축 할 수 있습니다. 하지만 이제는 실행할 때 코드가 클래스를 인스턴스화하려고 시도 할 때 예외가 발생합니다. 내가 얻을이 이전 dll은 어떻게 사용합니까/참조합니까?

Retrieving the COM class factory for component with CLSID {5EA33595-626F-4C08-9392 
-94DE0E344D48} failed due to the following error: 80040154 Class not registered 
(Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)). 

그렇다면 어떻게 응용 프로그램을 실행할 수 있도록 dll (또는 interop?)을 등록합니까? 내가 할 수 있다고 생각하지 않는다 regsvr32 dll - 그냥 "초기화 루틴 실패"오류를 제공합니다. 나는 regasm interop dll을 원한다고 생각하니?

+0

만약 이것을 downvote하려고한다면, 이유를 말해주십시오. –

답변

0

interop dll을 등록하지 않으면 interop가 가리키는 dll을 등록해야합니다.

예를 들어 Interop.Foo.dll이있는 경우 regsvr32에 등록해야하는 dll은 Foo.dll입니다. dll을 찾고 프로그램을 추가하거나 수동으로 등록해야합니다.

중요한 점은 COM dll은 특정 비트 버전입니다. 프로젝트가 AnyCPU로 설정되어 있지 않은지 확인하십시오. 참조하는 dll이 어떤 비트인지에 따라 x86 또는 x64에만 있어야합니다. 또한 x86 dll이고 64 비트 시스템에있는 경우 C:\Windows\SysWOW64\regsvr32.exe에있는 regsvr32 버전을 사용해야합니다. 그 중 하나는 64 비트 시스템의 32 비트 버전입니다. SysWOW64 폴더 외에도 폴더에 regsvr32.exe을 입력하면 C:\Windows\System32\ 디렉토리에있는 64 비트 버전을 사용합니다.

+0

좋습니다. 알아두면 좋을 것 같습니다. 그래서'C : \ Windows \ SysWOW64 \ regsvr32.exe Foo.dll'을 실행하면 "모듈이로드되지 못했습니다"라는 메시지가 나타납니다 - 해결해야하는 부분입니까? –

+0

Foo.dll은'C : \ Windows \ SysWOW64' 폴더에 있습니까? C : \ Windows \ SysWOW64 \ regsvr32.exe "C : \ Path \ To \ Foo.dll"을 실행해야 할 수도 있습니다. "그렇습니다. 해결해야 할 것이 있습니다. 대부분의'Foo.dll'은 소프트웨어 또는 SDK를 설치하여 등록되었을 것이므로 수동으로 등록 할 필요는 없습니다. 'Foo.dll'의 출처를 찾아서 다시 설치하십시오. –

+0

복사해야합니까? 이것은 사내에서 개발되었고 다른 어떤 것의 일부가 아닌 dll입니다. –