Property Put
HRESULT hr; // 0. IDispatch 인터페이스를 구현하는 객체 생성 IDispatch pIDisp; pIDisp.CreateInstance(_T("{XXX-XXX...X-XXX}")); // 1. Property의 Dispatch ID를 구함 OLECHAR * szMethodName = L"MyProperty"; DISPID dispidProperty; hr = dispidMethod->GetIDsOfNames(IID_NULL, &szMethodName, 1, LOCALE_USER_DEFAULT, &dispidProperty); // 2. 매개변수 준비 // MyProperty가 BSTR 타입인 경우 VARIANT varArg; // 입력 매개변수용 VARIANT varArg.vt = VT_BSTR; varArg.bstrVal = _bstr_t("TEST"); DISPPARAMS dispparams; dispparams.rgvarg = &varArg; dispparams.cArgs = 1; // 매개변수 총 개수 // 중요!!! 아래와 같이 설정해야 함 dispparams.cNamedArgs = 1; DISPID mydispid = DISPID_PROPERTYPUT; dispparams.rgdispidNamedArgs = &mydispid; // 호출 hr = pIDisp->Invoke( dispidProperty, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_PROPERTYPUT, // Property Put 호출임을 지정 &dispparams, // 매개변수 지정 NULL, NULL, NULL);Method 호출
HRESULT hr; // 0. IDispatch 인터페이스를 구현하는 객체 생성 IDispatch pIDisp; pIDisp.CreateInstance(_T("{XXX-XXX...X-XXX}")); // 1. Method의 Dispatch ID를 구함 OLECHAR * szMethodName = L"MyMethod"; DISPID dispidMethod; hr = dispidMethod->GetIDsOfNames(IID_NULL, &szMethodName, 1, LOCALE_USER_DEFAULT, &dispidMethod); // 2. 매개변수 준비 // MyMethod(long A, double B, IMyInterface * C); 인 경우 VARIANT varArgs[3]; // 실제 매개변수 배열 // 주의!!! 매개변수는 역순으로 대입한다. varArgs[0].vt = VT_UNKNOWN; varArgs[0].punkVal = pIMyInterface; varArgs[1].vt = VT_R8; varArgs[1].dblVal = 20.234; varArgs[2].vt = VT_INT; varArgs[2].lVal = 10; DISPPARAMS dispparams; dispparams.rgvarg = varArgs; dispparams.cArgs = 3; // 매개변수 총 개수 dispparams.cNamedArgs = 0; // 이름 지정형태의 매개변수 개수 // 3. 호출 hr = pIDisp->Invoke( dispidMethod, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, // Method 호출임을 지정 &dispparams, // 매개변수 지정 NULL, NULL, NULL);
'COM, ATL' 카테고리의 다른 글
표준 마샬링 좋은 예제 (1) | 2008.08.28 |
---|---|
ATL and Dual Interfaces (0) | 2008.08.28 |
ATL_COM Event 사용 하기. COM (0) | 2008.08.20 |
COM인터페이스 디자인 가이드 (0) | 2008.08.18 |
lcid 로케일 (0) | 2008.08.18 |
IDispatch::Invoke (1) | 2008.08.16 |
인보크 구현부 참조 (2) | 2008.08.16 |