2009-09-26 2 views
2

좋아, 나는 모든 인터페이스와 메소드를 모두 ComVisible (true)로 만든 C# dll을 만들었습니다. gacutil을 사용하여 GAC에 추가 한 다음 regasm을 사용하여 등록하고 형식 라이브러리 tlb 파일을 만들었습니다.C# COM 객체 호출

이제 com 개체를 호출하려고하는 또 다른 C# 프로젝트가 있습니다. 어떻게해야합니까? com 객체를 가져오고 호출을 사용하는 코드는 대략 어떻게 보이겠습니까?

답변

1

우선, 왜 COM을 통해 다른 C# 프로젝트에서 그 C# 어셈블리를 호출하고 싶습니까? 그럴 필요는 없습니다 ...

Ontopic : tlb 파일을 만든 경우 특별한 작업을 수행하지 않아야합니다. 생성 한 C# 어셈블리의 '런타임 호출 가능 래퍼'만 참조하면됩니다.

+0

확인

감사합니다 감사합니다
Anugrah 애 트레야, 나는 사용자뿐만 아니라 단지 COM을 통해 이동보다는 자신의 프로젝트에 대한 참조로 다른 C#을 DLL을 추가,하지만 기본적으로 내가하고 싶은 것은 수 있음을 이해 COM 호출을 테스트하십시오! C++을 배우지 않으면! 방법이 있습니까? 런타임 호출 가능 래퍼를 어떻게 참조합니까? – David

1

1 단계 : Runtime-Callable-Wrapper를 만듭니다. 두 가지 방법

이 있습니다

방법 1 : 당신이 필요 (작동하지 않는 경우 의미) 때때로, 기본 .NET-Interop를 마샬링을 사용 RCW이 방법을 사용하여

tlbimp <YourCOMSvr>.tlb /out:<YourCOMSvr>.dll 

를 생성하는 TlbImp를 사용하여 하여 추가 단계

ildasm <YourCOMSvr>.dll /out:<YourCOMSvr>.il 
//Modify <YourCOMSvr>.il 
ilasm <YourCOMSvr>.il /dll 

방법 2 수행하여 마샬링을 변경 : 수동으로 C++/CLI 프로젝트는 COM 서버

,174에 대한 래퍼 역할을 만들

2 단계 : C# 코드

참조하는 RCW와 COM 서버

Type yourComType= Type.GetTypeFromProgID(yourComSvrProgID, serverPcName); 
var oInterface = (IYourCOMInterface)Activator.CreateInstance(yourComType); 
//Then start using oInterface 
-2

당신의 C# 구성 요소는 COM 자격을 갖춘 구성 요소가된다 순간에 연결하려면 다음 코드를 사용, 또한처럼 행동 시작 규정 된 ActiveX 구성 요소.

그래서 아래에 주어진 자바 스크립트 코드와 간단한 HTML 페이지를 작성하는 것입니다 COM 호출을 테스트하기 위해 쉬운 방법 :

Set MyCOMObj = Server.CreateObject("NAME_OF_COM_EXPOSED_CLASS"); 
MyCOMObj.My_COM_Method(); 

당신이 오류없이이 같은 메소드를 호출 할 수 있다면, 그것은 의미 COM 통화가 완벽하게 작동합니다.
http://explorecsharp.blogspot.com