문제

우리는 기존의 기본 응용 프로그램 (대부분 VB로 작성된)과 협력하여 어셈블리를로드하고 "늦은 바인딩"으로 방법을 호출하고 있습니다. 소스 코드에 액세스 할 수 없습니다.

우리는 이 인터페이스를 C#으로 구현하고 네이티브 애플리케이션이 C# 어셈블리를 호출하도록 하려고 합니다.

이게 가능한 일인가요?

이것이 작동하도록 하기 위해 메소드 이름과 메소드 서명을 일치시키는 것 외에 우리가 해야 할 일이 있습니까?

도움이 되었습니까?

해결책 2

이를 작동시키는 데 필요한 단계는 다음과 같습니다.

  1. 클래스를 [ComVisible(true)]로 표시하고 고유한 [Guid] 속성을 지정하세요.
  2. ProgId를 일반적으로 MyNamespace.MyClass인 클래스와 일치시키세요. 하지만 클래스에 속성을 추가하여 이를 재정의할 수도 있습니다.
  3. 호출될 각 메소드에 대해 적절한 [DispId] 속성을 배치하십시오.
  4. 어셈블리를 컴파일하고 어셈블리에서 regasm.exe를 실행하세요.

그리고 짜잔!네이티브 코드는 "후기 바인딩"을 통해 C#을 호출할 수 있습니다.물론 내 기본 응용 프로그램이 내 어셈블리를 로드하는 방법을 알 수 있도록 여러 개의 레지스트리 키를 설정해야 했지만 모두 작동합니다.

다른 팁

VB6에서 .NET 코드를 호출하려는 경우 가장 깔끔한 방법은 C# 코드를 VB6 코드에 대한 COM 개체로 표시하는 것입니다. 따라서 C# 코드를 다음과 같이 표시해야 합니다. ComVisible 기존 COM 인터페이스처럼 보이는지 확인하세요.

업데이트: 여기시작하는 데 도움이 되는 기사입니다.

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