CreatePointerMoniker 대신 CreateItemMoniker을 사용해보세요. ROT에서 개체의 이름을 지정할 수 있습니다.
당신은이 같은 개체를 등록 할 수 있어야한다 : 당신이 당신의 객체가 자동으로 살해 그것에 더 이상 참조가 없을 때이 될하지 않으려면
DWORD RegisterInROT(LPCWSTR szObjName, IUnknown* pObj)
{
DWORD dwCookie = 0;
CComPtr<IRunningObjectTable> pROT;
if (GetRunningObjectTable(0, &pROT) == S_OK)
{
CComPtr<IMoniker> pMoniker;
if (CreateItemMoniker(NULL, szObjName, &pMoniker) == S_OK)
if (pROT->Register(0, pObj, pMoniker, &dwCookie) == S_OK)
return dwCookie;
}
return 0;
}
, 당신이 대신 ROTFLAGS_REGISTRATIONKEEPSALIVE를 지정할 수 있습니다 0 (check in in MSDN). 이 과정의 목적을 등록하는 데 사용이 (같은 이름을 사용해야 같은
void RevokeFromROT(DWORD dwCookie)
{
CComPtr<IRunningObjectTable> pROT;
if (GetRunningObjectTable(0, &pROT) == S_OK)
pROT->Revoke(dwCookie);
}
당신은 ROT에서 개체를 얻을 수 있습니다 : 함수 반환은 명시 적으로 나중에이 같은 ROT에서 개체를 제거하는 데 사용할 수있는 쿠키로 =)
void GetObjectFromROT(LPCWSTR szObjName, IUnknown** pObj)
{
CComPtr<IRunningObjectTable> pROT;
if (GetRunningObjectTable(0, &pROT) == S_OK)
{
CComPtr<IMoniker> pMoniker;
if (CreateItemMoniker(NULL, szObjName, &pMoniker) == S_OK)
pROT->GetObject(pMoniker, pObj);
}
}
왜이 경우 ROT를 사용 하시겠습니까? – sharptooth
@sharptooth IE 용 애드온을 작성 중입니다. 내 질문을 업데이트했습니다. –
글쎄, 알 겠어. IMoniker 인터페이스를 구현하는 방법을 검색해야합니다. – sharptooth