2013-03-08 5 views
2

나는 두 가지 기술이 뛰어나다.엑셀 플러그인으로 싱글 톤 객체의 다중 인스턴스 방지하기

하나는 IDTExtensibility2 인터페이스를 구현하는 COM 추가 기능입니다. 또 하나는 Excel-DNA를 통해 구현되는 RTD 서버입니다.

이러한 개체는 모두 Excel에서 인스턴스화됩니다. 각각의 개체는 런타임시 데이터를 가져와 Excel로 푸시하기 위해 세 번째 개체에 액세스해야합니다.

나는 엑셀 플러그인에이 객체를 넘겨 줄 수 없기 때문에 각 인스턴스가 같은 인스턴스를 공유 할 수 있다는 희망으로 싱글 톤으로 만들었습니다.

코드를 실행할 때 각자는 다른 하나가 생성 한 싱글 톤 객체의 인스턴스를 보지 못합니다.

동일한 객체를 참조하는 두 가지 추가 기능을 모두 얻으려면 어떻게해야합니까?

두 addins가 남아 있어야하고 프로세스 간 통신 설정으로 이동하지 않을 것이라는 가정하에 작업 해 보겠습니다.

TL/DR 두 개의 Excel 플러그인은 세 번째 개체를 공유해야하지만 세 번째 개체를 하나의 단일 개체로 만들면 각 Excel 플러그인이 다른 플러그인이 만든 세 번째 개체의 인스턴스가 표시되지 않으므로 작동하지 않습니다.

이러한 문제에 대한 해결책은 무엇입니까?

답변

1

추가 기능은 별도의 AppDomains에로드됩니다. 한 가지 옵션은 COM-Add-In을 Excel-DNA 추가 기능에 통합하는 것입니다.

  1. ExcelComAddIn (대신 IDTExtensibility2)에서 파생 추가 기능 클래스를 변경, 엑셀-DNA 프로젝트에 코드를 추가
  2. 로드하여 COM의 추가로이 쉽게 수 있습니다 그 계급은 AutoOpen에서 ExcelComAddInHelper.LoadComAddIn(...)을 통해

그렇지 않으면 일종의 AppDomain 통신이 필요할 것입니다. 로드 된 추가 기능에 해당하는 COMAddIn 개체의 Object 속성으로 설정 한 Marshal-By-Reference 개체를 설정하고 Excel-DNA 추가 기능에서 COM 인터페이스를 사용하여 검색 할 수 있습니다.

+0

귀하의 '맞습니다. AppDomains에 관해서 나는 leran해야만했다. 모든 코드를 동일한 addin에 병합하면이 작업이 가능합니다. 매우 감사. – chollida