2013-02-15 2 views
0

ActiveX COM 컨트롤과 해당 소스 코드가 있습니다. 메서드의 입력 매개 변수 중 하나를 변경하여 IDL 등을 변경하고 COM DLL과 TLB를 생성했습니다.TLBIMP 및 AXIMP와 다른 결과

그러나 .NET 프로젝트에서 COM DLL을 가져 왔을 때이 메서드는 이전 서명을 유지해야했습니다. 그래서 AXIMP를 사용하여 ActiveX DLL을 생성하려고 시도했습니다 (모두 동일하지만 시도해보고 싶었습니다).

여전히 메서드의 서명은 내가 변경 한 것으로 변경되지 않았습니다.

그러나 생성 된 TLB 파일에서 TLBIMP를 사용하여 interop DLL을 생성 할 때 메서드 서명이 올바르게 변경되었습니다.

어디에서 문제가있을 수 있습니까?

감사합니다.

+0

가져 오기 전에'regsvr32'를 사용하여 라이브러리를 등록 했습니까? – Carsten

답변

1

많은 수작업 단계가 있으므로 놓치기 쉽습니다. 오히려 타입 라이브러리를 어떻게 가져 왔는가에 달려 있습니다. 하나 이상의 방법이 있습니다. 참조 추가 + COM 탭에서 참조를 선택한 경우 새 COM 서버를 다시 등록하는 것을 잊어 버릴 가능성이 있습니다. 또는 우연히 새 것으로 대신 오래된 것을 골랐습니다. 예를 들어 지침을 변경할 때 발생할 수있는 것처럼, 이전처럼 정리하지 않은 경우입니다. 정리 작업은 COM 서버를 다시 작성하기 전에 수행해야하므로 매우 중요합니다. 레지스트리에 많은 쓰레기가 생길 수 있습니다.

그리고 예, Tlbimp.exe를 직접 사용하면 사고를 피할 수있는 가장 신뢰할 수있는 방법입니다. 이후 형식 라이브러리에서 직접 실행하고 전혀 레지스트리를 사용하지 마십시오.

과 같을 수 문제의 최소한의 금액을 가지고위한 조리법 : 첫 번째 RegSvr.exe의 -u

  • 이전 DLL 삭제를 실행하고 TLB에 의해

    1. 등록 취소 기존의 COM 서버는
    2. 을 파일 당신이
    3. 인터페이스를 사용하는 coclass에 대한 새로운 CLSID를 지정 변경된 인터페이스에 대한 새로운 방법
    4. 지정에게 새로운 IID를 추가 IDL을 변경
    5. 증가
    6. 가 등록 regsvr32.exe를
    7. 실행 Tlbimp로 서버를 새로운 COM 서버
    8. 빌드 이름의 주요 + 부 버전을 포함하는 라이브러리 버전
    9. 변경 출력 DLL의 이름, 찬성 .EXE는 .NET 프로젝트에서 기존의 상호 운용성 라이브러리에 대한 참조를 제거 상호 운용성 라이브러리
    10. 를 생성하는
    11. 사용 참조 + 찾아 새로운 상호 운용성 라이브러리를 추가하려면 추가

    이러한 단계를 건너 뛸 경우 빌드 문제, 레지스트리 오염, DLL 지옥 등의 문제가 발생할 수 있으며 모든 일을 끝내지 않고 난투극으로 하루를 마감 할 수 있습니다.