Visual Studio 2010 64 비트 COM 인터 로프 문제
-
20-09-2019 - |
문제
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으로 기본값을 받고 문제를 일으 킵니다.