문제

둘 다:

  • 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 ++ 선언이 제공됩니다.

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