"런타임에 바인딩"을 사용하여 어셈블리를로드하고 메서드를 호출하는 기존 네이티브 응용 프로그램 (VB로 작성되었을 가능성이 높음)을 사용하고 있습니다. 우리는 소스 코드에 액세스 할 수 없습니다.네이티브 코드에 대한 런타임 바인딩을 구현합니다.
이 인터페이스를 C#으로 구현하고 네이티브 응용 프로그램에서 C# 어셈블리를 호출하려고합니다.
가능한가요?
메소드 이름과 메소드 서명을 일치시키는 것 이상으로해야 할 일이 있습니까?
"런타임에 바인딩"을 사용하여 어셈블리를로드하고 메서드를 호출하는 기존 네이티브 응용 프로그램 (VB로 작성되었을 가능성이 높음)을 사용하고 있습니다. 우리는 소스 코드에 액세스 할 수 없습니다.네이티브 코드에 대한 런타임 바인딩을 구현합니다.
이 인터페이스를 C#으로 구현하고 네이티브 응용 프로그램에서 C# 어셈블리를 호출하려고합니다.
가능한가요?
메소드 이름과 메소드 서명을 일치시키는 것 이상으로해야 할 일이 있습니까?
이들은 그것이 작동되도록하는 데 필요한 단계는 다음과 같습니다
그리고 voila! 네이티브 코드는 "후기 바인딩"을 통해 C#을 호출 할 수 있습니다. 물론 내 기본 응용 프로그램에서 내 어셈블리를로드하는 방법을 알 수 있도록 여러 레지스트리 키를 설정해야했지만 모두 작동합니다.
그래서 내 대답에 뭐가 잘못 되었나요? 제가 한 발짝 내딛지 않았습니까? 내가 관련 기사를 가리키고 있었지, 그렇지? –
내 것이 최선의 대답이 아닌가요? – jonathanpeppers
하지만 처음에 질문을 했으므로 그 시점에서 답을 얻지 못했을 것입니다. upvoting 및/또는 acceptance로 최종 답변에 도달하는 데 도움을 준 사람은 신용을 얻는 것이 정상입니다. 평상시와 달리 평소에는 사용할 수없는 완전한 대답을 얻을 수 있습니다. 물론 마지막 세부 사항을 채우고 자신 만의 답을 만들고 받아 들일 수 있습니다 - 답은 원했던 그대로이며 그 의미에서 "최고"입니다. 그러나 사람들이 자신의 대답을 받아들이 기 위해서는 Stack Overflow의 정신에 위배됩니다. –
VB6에서 .NET 코드를 호출하려는 경우 가장 명확한 방법은 C# 코드를 VB6 코드의 COM 개체로 표시하는 것입니다. 따라서 C# 코드를 ComVisible
으로 표시해야합니다. 기존 COM 인터페이스처럼 보이는지 확인하십시오.
업데이트 :Here 님의 기사를 읽어보세요.
우리는 이미 작성된 기존 애플리케이션으로 작업하고 있으며 소스 코드가 없습니다. 후기 바인딩을 사용하여 특정 이름의 오브젝트를 열고 특정 이름의 메소드를 호출합니다. 이러한 개체를 C#에서 구현할 수 있을지 궁금, VB에서 이러한 방식으로 .NET 개체를로드 할 수 없을 수도 있습니다. "후기 바인딩"이란 용어가 무엇을 의미하는지 알고 있습니까? – jonathanpeppers
물론, COM 세계에서 후기 바인딩은 IDispatch를 의미합니다. 기존 COM 인터페이스에 대한 C# 구현이 가능한지 묻고 있으며 신중하게 구현하면 대답은 '예'가됩니다. –
이렇게하는 방법을 설명하는 좋은 기사가 있습니까? – jonathanpeppers
VB6 응용 프로그램에서 .NET 어셈블리의 메서드를 동적으로로드하고 호출하는 방법을 묻는 중입니다. 맞습니까? –
VB6 응용 프로그램이 런타임에 바인딩을 통해로드되고 실행되는 C# 어셈블리를 구현하려고합니다. 구현할 메소드 서명을 알고 있지만, 알아야 할 것은 C#에서 추가 기능이 필요하다는 것입니다. (내 어셈블리 ComVisible, 등 표시) – jonathanpeppers
당신이 시작해야 기사에 대한 링크로 내 대답을 업데이 트했습니다. –