문제
둘 다:
- clsid
- iid
위의 내용을 지정하고 사용합니다.
- CocreateInstance ()
위의 CLSID에 의해 지정된 클래스의 단일 초기화되지 않은 개체를 반환합니다.
그런 다음 C ++의 인터페이스 메소드에 액세스하려면 어떻게해야합니까? 없이:
- ATL
- MFC
- 그냥 평범한 C ++
그 후, 나는 createInstance ()를 사용합니다.
CreateInstance ()를 사용하여 문제가 있습니다. 마지막 매개 변수 -PPV
Oleview를 사용하여 위의 지정된 IIDABOVE IID의 방법을 볼 수 있습니다.
interface IS8Simulation : IDispatch {
HRESULT Open([in] BSTR FileName);
};
그런 다음 어떻게 위의 액세스에 액세스 할 수 있습니까? 예/안내 - 제발
문안 인사
해결책
CocreateInstance를 수행하면 인터페이스 포인터가 나타납니다. QueryInterface (...) 메소드를 통해 다른 인터페이스의 인터페이스 포인터를 쉽게 가져올 수 있습니다. 예,
IUnknown* pUnk = NULL; HRESULT hr = ::CoCreateInstance(clsid,NULL,CLSCTX_ALL,__uuidof(IUnknown),(void**)&pUnk);
is8Simulation* psim = null; hr = punk-> QueryInterface (__ uuidof (is8simulation), (void **) & psim);
이 작업을 수행 한 후에는 PSIM에서 IS8Simulation에 대한 포인터를 얻을 수 있으며이를 통해 해당 인터페이스의 메소드를 호출 할 수 있습니다. CocreateInstance 호출에 유효한 clsid를 제공해야합니다.
다른 팁
실제 문제가 무엇인지 조금 모호합니다. 일부 코드는 도움이 될 것입니다. 그러나 추측하려면 쿼리 interface가 필요합니까?
IS8Simulation* pSim = NULL;
hr = pUnk->QueryInterface(__uuidof(IS8Simulation), (void)&pSim);
위의 시도를 시도 할 것입니다. com 이해
또한 아래에서 방법을 호출하는 방법 일반 C ++:
HRESULT Open([in] BSTR FileName)
당신은 아마 #import "something.dll"을 원할 것입니다. 이렇게하면 #include "something.h"가하는 것과 유사하게 IS8Simulation과 같은 유형에 대한 C ++ 선언이 제공됩니다.