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]