문제

VS2010RC C# 솔루션에 VC6 COM DLL을 추가하려고합니다. DLL은 X86 버전을 만들기 위해 VC6 도구로 컴파일되었으며 VC7 크로스 플랫폼 도구로 컴파일하여 VC7 DLL을 생성했습니다.

X86 버전의 어셈블리는 소비 C# 프로젝트의 플랫폼이 X86으로 설정된 한 정상적으로 작동합니다. DLL의 X64 또는 X86 버전이 실제로 등록되어 있는지는 중요하지 않습니다. 그것은 둘 다와 함께 작동합니다. 플랫폼이 '모든 CPU'로 설정된 경우 BadImageFormatException 의 하중에 Interop.<name>.dll.

X64 버전은 프로젝트를 구축 할 수 없습니다. tlbimp 오류를받습니다.

TLBIMP : ERROR TI0000 : 입력 유형 라이브러리와 호환되는 단일 유효한 기계 유형을 지정해야합니다.

이 문제를 본 사람이 있습니까?

편집하다:

나는이 문제를 훨씬 더 파고 들었고 이것이 시각적 스튜디오 버그 일 수 있다고 생각합니다. 깨끗한 솔루션이 있습니다. 나는 언어 불가지론적인 '모든 CPU'를 선택한 COM 어셈블리를 가져옵니다. 결과 인터 로프 DLL의 프로세스 아키텍처는 MSIL이 아닌 x86입니다.

이것을 작동시키기 위해 지금은 손으로 인터롭을 만들어야 할 수도 있습니다.

다른 제안이 있다면 저에게 알려주세요.

도움이 되었습니까?

해결책

이 문제는 csproj 파일을 열고 다음 노드를 '(configuration) | 누락 된 모든 CPU'노드에 추가하여 해결할 수 있습니다.

<PlatformTarget>AnyCPU</PlatformTarget>

이 노드가 존재하지 않으면 tlbimp는 x86으로 기본값을 받고 문제를 일으 킵니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top