Microsoft MVP성태의 닷넷 이야기
MFC ActiveX 컨트롤 안에 있는 C# ActiveX 컨트롤 포인터 얻기 [링크 복사], [링크+제목 복사],
조회: 16424
글쓴 사람
SoulToMind
홈페이지
첨부 파일
 

Ctrl::OnCreate 메소드안에서

m_myFormView.Create(
NULL,
NULL,
WS_CHILD | WS_VISIBLE,
CRect(0, 0, 0, 0),
this,
IDD_MYFORMVIEW);

해당 코드를 추가하였고여 IDD_MYFORMVIEW 다이얼로그안에 C# ActiveX 컨트롤을 올렸습니다.

좀 헤매다가 GetActiveObject 함수로 현재 활성화된 ActiveX 객체 얻어올수 있따고 해서 해봣는데

HRESULT 0x800401e3 떠서 찾아보니 권한 문제라고 하여 스킵하고 다른방법을 강구하다가

아래 링크와 같은 방법으로 일단 해결은 했습니다. ActiveX 및 COM을 처음 접해보니 확신이 안서네요

https://www.codeproject.com/Articles/17490/Running-Object-Table-Provider-in-NET-consumer-in-M

Guid guid = Marshal.GenerateGuidForType(typeof(AxMainWebViewCtrl));
Ole32.RegisterActiveObject(this, ref guid, 0, out dwRegister);
.NET

IRunningObjectTable* pRunningObjectTable = NULL;
IMoniker* pMoniker = NULL;

HRESULT hr = GetRunningObjectTable(0, &pRunningObjectTable);

LPOLESTR strClsid;
StringFromCLSID(CLSID_COMROTVictim, &strClsid);
CreateItemMoniker(T2W("!"), strClsid, &pMoniker);

IUnknown* punk = NULL;
IBindCtx* pctx;
hr = CreateBindCtx(0, &pctx);
if (pRunningObjectTable->GetObject( pMoniker, &punk) != S_OK)
{
      pctx->Release();
      throw 1; //object not running
}

hr = punk->QueryInterface(__uuidof(ICOMROTVictim), (((void**)&m_pIF)));
VC++

해당 코드를 참고하였습니다.

보통 GetAcitveObject로 얻어야 되는건가요? 아닐 경우 어떠한 방법으로 얻어야 되는지요

읽어주셔서 감사합니다.











[최초 등록일: ]
[최종 수정일: 4/27/2018]


비밀번호

댓글 작성자
 



2018-04-27 10시09분
제가 MFC의 경우에는 건드려본지 한참 되어서 딱히 집어서 말은 못하지만, ActiveX도 가령 스크립트에 안전하다는 식의 표시를 해야만 얻어지는 경우가 있습니다. 아마도 GetActiveObject는 그런 처리 과정을 거치는 걸 수도 있습니다.

반면 ROT에 등록하는 것은 개발자가 명시적으로 해당 COM 객체를 다른 데에서 이용할 수 있도록 ROT에 등록했어야만 이용할 수 있는 것이기 때문에 GetActiveObject보다 일반적인 것은 아닙니다. 자신의 권한 안에서 COM Client/Server를 모두 작성할 수 있고 ROT에 노출해도 상관없다면 후자의 방식을 사용해도 괜찮을 것입니다.
정성태
2018-04-27 10시18분
[SoulToMind]
일단 답변감사드립니다 스크립트처리는 CatHelp 예제로 처리했는데, IObjectSafety 쪽으로도 한번 테스트 해봐야 겠네요

많은 도움이 되었습니다.
[guest]
2018-04-28 01시02분
[SoulToMind] MFC ActiveX 컨트롤에 IObjectSafety 적용하니 해결되었습니다. 정말 감사드립니다 2주동안 씨름하던거라 해결하니 기쁘네요
[guest]
2018-04-28 02시23분
[SoulToMind] GetActiveObject도 RegisterActiveObject를 해줘야 되네요. 저와같은 분이 있으실까봐 글 달고 갑니다.
[guest]

... 61  [62]  63  64  65  66  67  68  69  70  71  72  73  74  75  ...
NoWriterDateCnt.TitleFile(s)
1084김종하9/3/201218110team foundation express 2012에서 새 프로젝트 생성... [3]
1082김대경8/23/201216880windows2008 에서 ActiveX 사용 시 문제점. [3]
1091김대경9/20/201216984    답변글 [답변]: windows2008 에서 ActiveX 사용 시 문제점. [2]파일 다운로드1
1081Seon...8/20/201219089WCF 파일 업,다운로드 문제 [2]
1080배동선8/13/201218077정품 라이센스 인증 개발에 대해 조언을 구하고 싶습니다 [4]
1079송준호8/11/201215929basicHttpBinding stream 전송에 관하여 질문드립니다. [1]
1078Ho S...8/10/201214967윈도우폰 지도 구현에서 ㅠㅠㅠ 질문드립니다. [1]파일 다운로드1
1077한우주8/6/201217793웹서비스 호출 후 세션 유지하기 [1]
1076이성환8/2/201217786dynamic 변수 할당은 도대체 어디에???? [1]
1073pass...7/24/201217364c# 으로 만드는 음성인식/TTS 프로그램에 관련해서.. [3]
1072일반인7/23/201220010rss 만드는 방법 알려주실 수 있으신가요? [5]
1069임경훈7/20/201221262아래와 같은 오류후 IIS가 다운되는 현상이 발생합니다. [1]
1068신호철6/15/201219813ClassLibrary COM+ 등록 안되는 현상 [2]
1067김은주6/14/201229836소스세이프 사용시 pfx 파일 빌드 실패 [3]
1066너무초보6/3/201216324안녕하세요! 디렉토리 삭제 오류 질문 좀 드립니다. [4]
1065이성환5/23/201218319Assembly.LoadFrom Assembly.Load 의 차이점이 궁금합니다. [2]파일 다운로드1
1064푸우5/21/201217066GPU 디바이스 재시작시 WPF + .NET 3.5 기반 어플리케이션 UI 문제 [2]
1063발코더5/20/201216978귀신 곡할 상황 질문입니다. [3]
1062김규덕5/12/201217185ffmpeg 관련 조언 구합니다. [2]
1061Dave5/11/201216280언제 스크린 캡쳐 하시나요? [1]
1058정재훈5/11/201218054c#으로 동영상에 로고를 삽입하는 기능을 구현중입니다. [3]
1057전남진5/1/201216943** 몇일째 고생하다가 웹 검색을 통해 알게되어 질문드립니다.. 초보 질문이긴하지만 도움 부탁드려요 [2]
1056안현수5/1/201219034listview 와 웹파싱에관해 질문드립니다 [1]파일 다운로드1
1055이성환4/30/201217309WPF FramworkElement의 이벤트를 가져오고 싶습니다. [3]
1054정웅모4/20/201216249안녕하세요 [1]
1053폭풍코딩4/19/201216655스마트클라이언트 ctrl-c 복사가 작동하지 않습니다. [1]
... 61  [62]  63  64  65  66  67  68  69  70  71  72  73  74  75  ...