당신이 (이 VB에서 만든 경우 매우 가능성이 높습니다) 지원 IDispatch
를 호출하고있는 구성 요소가 늦게 사용할 수있는 경우에 대한 C++ LoadLibrary
의 예와 GetProcAddress
있다 바인딩은 COM 인터페이스 메서드를 동적으로 호출합니다. 예를 들어
:
가
IDispatch *pDispatch;
// Assumes pUnknown is IUnknown pointer to component that you want to call.
HRESULT hr = pUnknown->QueryInterface(IID_IDispatch, reinterpret_cast<void **>(&pDispatch));
if(SUCCEEDED(hr))
{
DISPID dispid;
// Assumes sMethodName is BSTR containing name of method that you want to call.
hr = pDispatch->GetIDsOfNames(IID_NULL, &sMethodName, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if(SUCCEEDED(hr))
{
// Assumes that the method takes zero arguments.
VARIANT vEmpty;
vEmpty.vt = VT_EMPTY;
DISPPARAMS dp = { &vt, 0, 0, 0 };
hr = pDispatch->Invoke(dispid, IID_INULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &dp, 0, 0, 0);
}
pDispatch->Release();
}
IDispatch::GetIDsOfNames()
이 예에서 지정된 방법의 DISPID
을 인출 후 IDispatch::Invoke()
DISPID
에 전달하여 그 메소드를 호출한다.
명확하게하기 위해 호출 할 메서드에 인수가 없다고 가정했지만 Invoke()
으로 전달되는 DISPPARAMS
structure을 수정할 수 있습니다.