문제

내 계획에서 기존 응용 프로그램 RTD 서버.

응용 프로그램은 현재 C++로 작성하고 동안 나는 것이 결국 항구 그것은 C#/모노고 싶을 추가 할 수 있 RTD 기능은 C++.

내가 찾는 몇 조각 샘플의 코드(MSVCRTDServer)이 사이트: http://weblogs.asp.net/kennykerr/archive/2008/10/29/excel-rtd-server-in-c.aspx

불행하게도 이러한 Dll 을 나는 모든 나의 COM(좋은 졌)오래 전에.

나는 어떻게 통합하는 방법에 대해 DLL 을 예제로 EXE?이것은 분명히 대해 포장 COM 서버에서 EXE 보다는 오히려 DLL.

편집:

참고,기존 응용 프로그램 MFC GUI.

편집:

사용 용도가 taht 기존의 GUI 앱을 실행할 필요 없는 클라이언트의 COM/RTD 인터페이스 응용 프로그램을 실행합니다.(나가지 않을 거부하는 것이 좋)

기본적으로 구현하고자 IRTDServer 인터페이스로 나 자신의 데이터 그래서 Excel(또는 다른 응용 프로그램)에 액세스할 수 있는 동적 데이터는 응용 프로그램을 제공합니다.(프로그램에 대한 시리얼 포트에 장치는 장치에 상태가/국가 변경하고 싶어를 업데이트할 수 있으려면 클라이언트에 변경이 비동기적으로)

그래서 내가 만들 필요가 COM 체 등록 그것은 그래서 그 클라이언트 볼 수 있습니다.

나는 확실하지 않을 추가하는 방법 COM 체 exe 고 있는 COM 객체를 구현하는 기존의/pre-definfed 인터페이스입니다.

편집 기 시작했에 현상금을 이 그래서 얻을 수 있는 코드 샘플입니다.분명히 내가 너무 게으르고보(또는 어쩌면 그것은 단지의 하이퍼 혐오 COM)를 시작으로 기존 대답하여 채 Penov.(는 것은 매우 유용하고 훌륭한 시작)

그래서 기본적으로 내가 찾는 사람은:

코드을 기반으로 기존 대화 MFC 응용 프로그램가 스레드를 실행하고 그것으로 RTD 서버(동일한 UI)

모든 cocreate 및 CoThisandthat,etc.하고 말하면 해당 코드에 내 exe?어떻게/확장을 구현하 IRTD 까요?

전후의 샘플 MFC 안녕하세요 세계 응용 프로그램(대화기반)얻을 것입니다 허용되는 대답이다.

  1. 기 전에 응용 프로그램의 소스 코드 mfc 대화 앱입니다.
  2. 후""응용 프로그램을 기반으로 하는 MFC 응용 프로그램에서 1 단계를 구현하는 RTD srver 인터페이스 및 모든 해당 소스입니다.(모든 프로젝트 파일,소,etc.)
  3. 촬영 단계에서 GUI/visual studio 및 그렇지 않으면을 만들기 단계 2 단계 1.(IDL,etc.다른 파일을 만들어집니다.)

이상적으로 제공됩 VS2008 지만,어떤 버전에 작동합니다.

감사합니다.

도움이 되었습니까?

해결책

편집: 야,나는 감동하지 않습니다 MFC 이후 2000 년.라고 기대했하는 방법의 나머지 부분에 대한 내 인생이다.:-)어쨌든...

Aparently,마법사가 진화 이후 지난 세기에 있습니다.다음 단계를 위한 추가 ATL COM 지원하고 MFC 응용 프로그램 VS2008.

  1. 를 생성하는 간단하 MFC 대화 기반의 응용 프로그램이라고 MFCTest. 체크인 자동화를 체크박스에서는 방법에 대해 설명합니다
  2. 프로젝트를 마우스 오른쪽 클릭합 및 선택 추가/클래스...대화 상자에서 선택 ATL 간단한 객체입니다.당신이 얻을 경고하는 ATL 지원 될 것입니다 프로젝트에 추가됩니다.
  3. 새로운 마법사를 열기 위한 옵션으로 새로운 ATL 개체입니다.

를 수행해야합니다.

솔직히 보이지 않는데는 이유를 게시 여기는 마법사가 생성한 코드입니다.하지만 추가적인 질문이 있을 경우에 특정 조각의 코드,포스트들에 그래서 내가 당신을 도와 드리겠습니다.


편집: 이것은 서로 문서입니다.만약 우리가 이런 식으로 계속할 수 있도 게시하는 책입니다.:-)

일단 당신이 당신의 간단한 ATL 체에 통합되어 MFC 프로젝트에 추가할 수 있습니다 RTD 인터페이스다.해야 합니다 모두에서 상속 인터페이스에 추가 COM_INTERFACE_MAP.이후 RTD 인터페이스 IDispatch 인터페이스를 상속하는 클래스에서 IDispatchImpl<>며 추가 IDispatch 을 COM_INTERFACE_MAPCOM_INTERFACE_ENTRY2 (지정하기 위해 그것을 통해 구현 IRtdServer.

나는 정말로 친하지 않는 방법으로 RTD 작동합니다.이 있을 수도 있습을 추가에 대한 지원 COM 포트를 연결 귀하의 클래스를 경우,엑셀 필요 supscribe 를 업데이트됩니다.여기에서도에 대한 링크를 새로 고침 연결에 포인트를 ATL 지식입니다.

Btw,나는 우연히 이 블로그 게시물이 있는 C++의 정의는 두 RTD 인터페이스.아마 당신은 이미 그들을 가지고,하지만 제 생각에 나는 그것을 추가한 완벽을 기하기 위해.


가장 쉬운 방법을 만드는 것입 새로운 ATL EXE 프로젝트를 통해 대 마법사하고 보자 등록 및 프로세스 관리 부분입니다.나머지는 다릅니다.

필요한 경우 특정한 샘플을 시작 당신의 여행은 다시 땅의 COM out-of-proc,당신이 볼 수 있습니다 래브라도.

부부의 링크할 수 있는 더 관심을 너:

편집: 당신이해야하는 방법을 알고 등록에 EXE COM,그래서 클라이언트 응할 수 있는 CocreateInstance 를 확인하십시오 CoRegisterClassObject.그러나:

  • 체해야 COM 체
  • 당신이 필요하는 클래스를 구현하고 그것을 위해 공장
  • 당신이 원하는 경우 프로세스 관리(즉,COM 시작 앱 on demand),ClassID nees 등록하는 것이에서 레지스트리
  • 클라이언트가 만들려고 그것을 통해 ProgID,ProgID 등록해야 하는 레지스트리에
  • 필요할 수 있는 사용자 정의 프록시/스텁 dll,을 하는 경우 사용자 정의 마샬링
  • 이 있는 경우 UI,을 수정해야의 종료를 논리,그래서 그 사용자가 닫 UI,하지 않는 응용 프로그램을 종료 untili 마지막 COM 참조체 출시되었습니다뿐만 아니라

EDIT2: 나는 여전히 당신이 보는 것이 좋에 ATL out-of-proc 샘플에서 골 ATL 마법사를 생성하는 것이 이해하기 시퀀스의 작업입니다.그러나 당신이 필요할 수 있습을 조금 탐구 ATL 코드를 정확하게 무엇이 있는지 확인합니다.

여기에는 짧은 버전의 프로세스:

에서 시작,응용 프로그램 nees 를 확인하기 위해 특정 명령 라인을 인수- /임베디드.는 경우에는 인수 제시,그것은 응용 프로그램이 실행되고있 COm 에 대한 응답 코코다.의 수를 표시하지 않도록 선택 UI 를 이 시점에서.

는지 여부를 보여주는 앱이 UI 또는지,그것은 등록되어 있는 클래스는 공장에 대한 모든 COM 체 제공을 통해 CoRegisterClassObject API 내가 위에서 언급된다.

는 경우 응용 프로그램이 시작을 통해 COM,그것을 선택할 수 있습을 종료 자체에서 마지막 COM 참조 릴리스입니다.(이것은 일반적으로 검출되는 추가적인 글로벌 ref 는 카운터가 증가 모든 개체에 대 AddRef 및 감소에 모든 개체 릴리스)입니다.그러나 응용 프로그램 종료되지 않는 경우,그 자체 감지되었다는 사용자와 상호 작용했 UI.이 경우 종료할 때까지 사용자가 명시적으로 닫을 마지막 UI(하는 감지기 쉽고,응용 프로그램은 일반적으로 표시되지 않습 UI 때까지 사용자 시작하려고 시도하면 그것을 명시적으로)

면 의해 시작되었는 사용자와 라 UI 가 닫히,응용 프로그램을 확인해야가 있는 경우 뛰어난 COM 참조하는 모든 개체습니다.없는 경우에도,그것은 종료할 수 있습 자체입니다.그러나,만약 있다 COM 참조,응용 프로그램을 숨기려한 UI,하지만 계속 실행하는 마지막까지 참가 해제됩니다.

면에 도달하는 시점에 그것을 종료해야 해지 모든 클래스는 공장에 등록한다.

다른 팁

당신이 원수에서 코드 ATL 서버 프로젝트입니다.에 샘플을 참조 하십시오 ATL 서버 Samples .

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