2009-08-14 3 views
0

"런타임에 바인딩"을 사용하여 어셈블리를로드하고 메서드를 호출하는 기존 네이티브 응용 프로그램 (VB로 작성되었을 가능성이 높음)을 사용하고 있습니다. 우리는 소스 코드에 액세스 할 수 없습니다.네이티브 코드에 대한 런타임 바인딩을 구현합니다.

이 인터페이스를 C#으로 구현하고 네이티브 응용 프로그램에서 C# 어셈블리를 호출하려고합니다.

가능한가요?

메소드 이름과 메소드 서명을 일치시키는 것 이상으로해야 할 일이 있습니까?

+0

VB6 응용 프로그램에서 .NET 어셈블리의 메서드를 동적으로로드하고 호출하는 방법을 묻는 중입니다. 맞습니까? –

+0

VB6 응용 프로그램이 런타임에 바인딩을 통해로드되고 실행되는 C# 어셈블리를 구현하려고합니다. 구현할 메소드 서명을 알고 있지만, 알아야 할 것은 C#에서 추가 기능이 필요하다는 것입니다. (내 어셈블리 ComVisible, 등 표시) – jonathanpeppers

+0

당신이 시작해야 기사에 대한 링크로 내 대답을 업데이 트했습니다. –

답변

0

이들은 그것이 작동되도록하는 데 필요한 단계는 다음과 같습니다

  1. 마크 클래스 [대해 ComVisible (사실)], 그리고에 고유 한 [트 가이]
  2. 이 일치 속성 당신의 PROGID를 제공해야합니다 당신의 클래스는 일반적으로 MyNamespace.MyClass이지만 클래스에 특성을 추가하여이를 재정의 할 수도 있습니다.
  3. 호출 할 각 메서드에 대해 적절한 [DispId] 특성 넣기 어셈블리를 컴파일하고 regasm.exe를 실행합니다 귀하의 어셈블리에

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

+0

그래서 내 대답에 뭐가 잘못 되었나요? 제가 한 발짝 내딛지 않았습니까? 내가 관련 기사를 가리키고 있었지, 그렇지? –

+0

내 것이 최선의 대답이 아닌가요? – jonathanpeppers

+0

하지만 처음에 질문을 했으므로 그 시점에서 답을 얻지 못했을 것입니다. upvoting 및/또는 acceptance로 최종 답변에 도달하는 데 도움을 준 사람은 신용을 얻는 것이 정상입니다. 평상시와 달리 평소에는 사용할 수없는 완전한 대답을 얻을 수 있습니다. 물론 마지막 세부 사항을 채우고 자신 만의 답을 만들고 받아 들일 수 있습니다 - 답은 원했던 그대로이며 그 의미에서 "최고"입니다. 그러나 사람들이 자신의 대답을 받아들이 기 위해서는 Stack Overflow의 정신에 위배됩니다. –

1

VB6에서 .NET 코드를 호출하려는 경우 가장 명확한 방법은 C# 코드를 VB6 코드의 COM 개체로 표시하는 것입니다. 따라서 C# 코드를 ComVisible으로 표시해야합니다. 기존 COM 인터페이스처럼 보이는지 확인하십시오.

업데이트 :Here 님의 기사를 읽어보세요.

+0

우리는 이미 작성된 기존 애플리케이션으로 작업하고 있으며 소스 코드가 없습니다. 후기 바인딩을 사용하여 특정 이름의 오브젝트를 열고 특정 이름의 메소드를 호출합니다. 이러한 개체를 C#에서 구현할 수 있을지 궁금, VB에서 이러한 방식으로 .NET 개체를로드 할 수 없을 수도 있습니다. "후기 바인딩"이란 용어가 무엇을 의미하는지 알고 있습니까? – jonathanpeppers

+0

물론, COM 세계에서 후기 바인딩은 IDispatch를 의미합니다. 기존 COM 인터페이스에 대한 C# 구현이 가능한지 묻고 있으며 신중하게 구현하면 대답은 '예'가됩니다. –

+0

이렇게하는 방법을 설명하는 좋은 기사가 있습니까? – jonathanpeppers

관련 문제