COleDispatchDriver Sınıfı
OLE otomasyonunun istemci tarafını uygular.
Sözdizimi
class COleDispatchDriver
Üyeler
Ortak Oluşturucular
Veri Akışı Adı | Açıklama |
---|---|
COleDispatchDriver::COleDispatchDriver | Bir COleDispatchDriver nesne oluşturur. |
Genel Yöntemler
Veri Akışı Adı | Açıklama |
---|---|
COleDispatchDriver::AttachDispatch | Nesneye COleDispatchDriver bir IDispatch bağlantı ekler. |
COleDispatchDriver::CreateDispatch | Bir IDispatch bağlantı oluşturur ve nesneye COleDispatchDriver ekler. |
COleDispatchDriver::D etachDispatch | Bağlantıyı IDispatch serbest bırakmadan ayırır. |
COleDispatchDriver::GetProperty | Otomasyon özelliğini alır. |
COleDispatchDriver::InvokeHelper | Otomasyon yöntemlerini çağırmak için yardımcı. |
COleDispatchDriver::ReleaseDispatch | Bir IDispatch bağlantı serbest bırakır. |
COleDispatchDriver::SetProperty | Otomasyon özelliğini ayarlar. |
Ortak İşleçler
Veri Akışı Adı | Açıklama |
---|---|
COleDispatchDriver::operator = | Kaynak değeri nesnesine COleDispatchDriver kopyalar. |
COleDispatchDriver::operator LPDISPATCH | Temel alınan IDispatch işaretçiye erişir. |
Ortak Veri Üyeleri
Veri Akışı Adı | Açıklama |
---|---|
COleDispatchDriver::m_bAutoRelease | sırasında veya nesne yok etme sırasında IDispatch ReleaseDispatch serbest bırakılıp bırakılmayacağını belirtir. |
COleDispatchDriver::m_lpDispatch | Bu COleDispatchDriver öğesine eklenmiş arabirimin IDispatch işaretçisini gösterir. |
Açıklamalar
COleDispatchDriver
temel sınıfına sahip değildir.
OLE dağıtım arabirimleri bir nesnenin yöntemlerine ve özelliklerine erişim sağlar. türüne sahip COleDispatchDriver
bir dağıtım bağlantısı ekleme, ayırma, oluşturma ve serbest bırakmanın IDispatch
üye işlevleri. Diğer üye işlevleri, çağrıyı IDispatch::Invoke
basitleştirmek için değişken bağımsız değişken listelerini kullanır.
Bu sınıf doğrudan kullanılabilir, ancak genellikle yalnızca Sınıf Ekleme sihirbazı tarafından oluşturulan sınıflar tarafından kullanılır. Tür kitaplığını içeri aktararak yeni C++ sınıfları oluşturduğunuzda, yeni sınıflar türünden COleDispatchDriver
türetilir.
kullanma COleDispatchDriver
hakkında daha fazla bilgi için aşağıdaki makalelere bakın:
Devralma Hiyerarşisi
COleDispatchDriver
Gereksinimler
Üst bilgi: afxdisp.h
COleDispatchDriver::AttachDispatch
Nesneye AttachDispatch
bir IDispatch
işaretçi eklemek için üye işlevini çağırın COleDispatchDriver
. Daha fazla bilgi için bkz . IDispatch Arabirimini Uygulama.
void AttachDispatch(
LPDISPATCH lpDispatch,
BOOL bAutoRelease = TRUE);
Parametreler
lpDispatch
Nesneye eklenecek ole IDispatch
nesnesinin işaretçisi COleDispatchDriver
.
bAutoRelease
Bu nesne kapsam dışına çıktığında gönderimin serbest bırakılıp bırakılmayacağını belirtir.
Açıklamalar
Bu işlev, nesneye zaten eklenmiş olan tüm IDispatch
işaretçileri COleDispatchDriver
serbest bırakır.
Örnek
void COleContainerView::OnAttachDispatch()
{
CLSID clsidWMP;
LPDISPATCH pWMPDispatch = NULL;
COleDispatchDriver oddWMP;
try
{
AfxCheckError(::CLSIDFromProgID(_T("WMPlayer.OCX"), &clsidWMP));
AfxCheckError(::CoCreateInstance(clsidWMP, NULL, CLSCTX_INPROC_SERVER,
IID_IDispatch, (LPVOID*)& pWMPDispatch));
oddWMP.AttachDispatch(pWMPDispatch, TRUE);
pWMPDispatch = NULL; // our COleDispatchDriver now owns the interface
CString strUIMode;
oddWMP.GetProperty(23, VT_BSTR, (void*)& strUIMode);
TRACE(_T("WMP uiMode is %s.\n"), strUIMode);
}
catch (COleException* pe)
{
pe->ReportError();
pe->Delete();
}
catch (CMemoryException* pe)
{
pe->ReportError();
pe->Delete();
}
// cleanup
if (NULL != pWMPDispatch)
{
pWMPDispatch->Release();
}
// COleDispatchDriver automatically releases the dispatch interface when
// it goes out of scope if m_bAutoRelease is TRUE.
}
COleDispatchDriver::COleDispatchDriver
Bir COleDispatchDriver
nesne oluşturur.
COleDispatchDriver();
COleDispatchDriver(LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE);
COleDispatchDriver(const COleDispatchDriver& dispatchSrc);
Parametreler
lpDispatch
Nesneye eklenecek ole IDispatch
nesnesinin işaretçisi COleDispatchDriver
.
bAutoRelease
Bu nesne kapsam dışına çıktığında gönderimin serbest bırakılıp bırakılmayacağını belirtir.
dispatchSrc
Var olan COleDispatchDriver
bir nesneye başvuru.
Açıklamalar
FormCOleDispatchDriver( LPDISPATCH lpDispatch, BOOL bAutoRelease = TRUE )
, IDispatch arabirimini bağlar.
Form COleDispatchDriver( const COleDispatchDriver& dispatchSrc )
varolan COleDispatchDriver
bir nesneyi kopyalar ve başvuru sayısını artırır.
Form COleDispatchDriver( )
bir COleDispatchDriver
nesne oluşturur ancak arabirimi bağlamaz IDispatch
. Bağımsız değişkenler olmadan kullanmadan COleDispatchDriver( )
önce COleDispatchDriver::CreateDispatch veya COleDispatchDriver::AttachDispatch kullanarak bir IDispatch
bağlamanız gerekir. Daha fazla bilgi için bkz . IDispatch Arabirimini Uygulama.
Örnek
COleDispatchDriver::CreateDispatch örneğine bakın.
COleDispatchDriver::CreateDispatch
Bir IDispatch arabirim nesnesi oluşturur ve nesneye COleDispatchDriver
ekler.
BOOL CreateDispatch(
REFCLSID clsid,
COleException* pError = NULL);
BOOL CreateDispatch(
LPCTSTR lpszProgID,
COleException* pError = NULL);
Parametreler
clsid
Oluşturulacak bağlantı nesnesinin IDispatch
sınıf kimliği.
pError
Oluşturma işleminden kaynaklanan durum kodunu tutacak bir OLE özel durum nesnesi işaretçisi.
lpszProgID
Dağıtım nesnesinin oluşturulacağı otomasyon nesnesinin "Excel.Document.5" gibi programlı tanımlayıcısına yönelik işaretçi.
Dönüş Değeri
Başarıda sıfır olmayan; aksi takdirde 0.
Örnek
void COleContainerView::OnCreateDispatch()
{
COleDispatchDriver disp;
COleException* pe = new COleException;
try
{
// Create instance of Microsoft System Information Control
// by using ProgID.
if (disp.CreateDispatch(_T("WMPlayer.OCX"), pe))
{
//Get uiMode.
CString strUIMode;
disp.InvokeHelper(23, DISPATCH_PROPERTYGET, VT_BSTR,
(void*)& strUIMode, NULL);
CString strMsg;
strMsg.Format(_T("WMP uiMode is %s."), strUIMode);
AfxMessageBox(strMsg);
}
else
{
throw pe;
}
}
//Catch control-specific exceptions.
catch (COleDispatchException* pe)
{
CString cStr;
if (!pe->m_strSource.IsEmpty())
cStr = pe->m_strSource + _T(" - ");
if (!pe->m_strDescription.IsEmpty())
cStr += pe->m_strDescription;
else
cStr += _T("unknown error");
AfxMessageBox(cStr, MB_OK,
(pe->m_strHelpFile.IsEmpty()) ? 0 : pe->m_dwHelpContext);
pe->Delete();
}
//Catch all MFC exceptions, including COleExceptions.
// OS exceptions will not be caught.
catch (CException* pe)
{
TRACE(_T("%s(%d): OLE Execption caught: SCODE = %x"),
__FILE__, __LINE__, COleException::Process(pe));
pe->Delete();
}
pe->Delete();
}
COleDispatchDriver::D etachDispatch
Geçerli IDispatch
bağlantıyı bu nesneden ayırır.
LPDISPATCH DetachDispatch();
Dönüş Değeri
Önceden eklenmiş OLE IDispatch
nesnesinin işaretçisi.
Açıklamalar
IDispatch
serbest bırakılmaz.
LPDISPATCH türü hakkında daha fazla bilgi için bkz . Windows SDK'da IDispatch Arabirimini Uygulama.
Örnek
LPDISPATCH CreateLPDispatch(LPCTSTR lpszProgId)
{
COleDispatchDriver disp;
disp.CreateDispatch(lpszProgId);
return disp.DetachDispatch();
}
COleDispatchDriver::GetProperty
dwDispID tarafından belirtilen nesne özelliğini alır.
void GetProperty(
DISPID dwDispID,
VARTYPE vtProp,
void* pvProp) const;
Parametreler
dwDispID
Alınacak özelliği tanımlar.
vtProp
Alınacak özelliği belirtir. Olası değerler için COleDispatchDriver::InvokeHelper için Açıklamalar bölümüne bakın.
pvProp
Özellik değerini alacak değişkenin adresi. vtProp tarafından belirtilen türle eşleşmelidir.
Örnek
CString IMyComObject::GetString(DISPID dispid)
{
CString result;
GetProperty(dispid, VT_BSTR, (void*)& result);
return result;
}
COleDispatchDriver::InvokeHelper
wFlags tarafından belirtilen bağlamda dwDispID tarafından belirtilen nesne yöntemini veya özelliğini çağırır.
void AFX_CDECL InvokeHelper(
DISPID dwDispID,
WORD wFlags,
VARTYPE vtRet,
void* pvRet,
const BYTE* pbParamInfo, ...);
Parametreler
dwDispID
Çağrılacak yöntemi veya özelliği tanımlar.
wFlags
çağrısının IDispatch::Invoke
bağlamını açıklayan bayraklar. . Olası değerlerin listesi için Windows SDK'sında IDispatch::Invoke içindeki wFlags parametresine bakın.
vtRet
Dönüş değerinin türünü belirtir. Olası değerler için Açıklamalar bölümüne bakın.
pvRet
Özellik değerini veya dönüş değerini alacak değişkenin adresi. vtRet tarafından belirtilen türle eşleşmelidir.
pbParamInfo
PbParamInfo'nun ardından parametrelerin türlerini belirten null olarak sonlandırılan bayt dizesi işaretçisi.
...
PbParamInfo'da belirtilen türlerdeki parametrelerin değişken listesi.
Açıklamalar
pbParamInfo parametresi, yönteme veya özelliğe geçirilen parametre türlerini belirtir. Bağımsız değişkenlerin değişken listesi, söz dizimi bildiriminde ... ile temsil edilir.
vtRet bağımsız değişkeninin olası değerleri VARENUM numaralandırmasından alınır. Olası değerler aşağıdaki gibidir:
Simge | Dönüş Türü |
---|---|
VT_EMPTY | void |
VT_I2 | short |
VT_I4 | long |
VT_R4 | float |
VT_R8 | double |
VT_CY | CY |
VT_DATE | DATE |
VT_BSTR | BSTR |
VT_DISPATCH | LPDISPATCH |
VT_ERROR | SCODE |
VT_BOOL | BOOL |
VT_VARIANT | VARYANT |
VT_UNKNOWN | LPUNKNOWN |
pbParamInfo bağımsız değişkeni, VTS_ sabitlerinin boşlukla ayrılmış bir listesidir. Bu değerlerden biri veya daha fazlası boşluklarla (virgülle değil) ayrılmış olarak işlevin parametre listesini belirtir. Olası değerler EVENT_CUSTOM makroyla birlikte listelenir.
Bu işlev parametreleri VARIANTARG değerlerine dönüştürür ve ardından IDispatch::Invoke yöntemini çağırır. çağrısı Invoke
başarısız olursa, bu işlev bir özel durum oluşturur. tarafından IDispatch::Invoke
döndürülen SCODE (durum kodu) DISP_E_EXCEPTION ise, bu işlev bir COleException nesnesi oluşturur; aksi takdirde bir COleDispatchException oluşturur.
Daha fazla bilgi için bkz . VARIANTARG, IDispatch Arabirimini Uygulama, IDispatch::Invoke ve Windows SDK'da COM Hata Kodlarının Yapısı.
Örnek
COleDispatchDriver::CreateDispatch örneğine bakın.
COleDispatchDriver::m_bAutoRelease
TRUE ise, m_lpDispatch tarafından erişilen COM nesnesi ReleaseDispatch çağrıldığında veya bu COleDispatchDriver
nesne yok edildiğinde otomatik olarak serbest bırakılır.
BOOL m_bAutoRelease;
Açıklamalar
Varsayılan olarak, m_bAutoRelease
oluşturucuda TRUE olarak ayarlanır.
COM nesnelerini yayımlama hakkında daha fazla bilgi için bkz . Windows SDK'sında Başvuru Sayma ve IUnknown::Release Uygulama.
Örnek
// Clean up by forcing Release to be called
// on COleDispatchDriver object and delete
if (bError)
{
pDisp->m_bAutoRelease = TRUE;
delete pDisp;
pDisp = NULL;
}
COleDispatchDriver::m_lpDispatch
Bu COleDispatchDriver
öğesine eklenmiş arabirimin IDispatch
işaretçisi.
LPDISPATCH m_lpDispatch;
Açıklamalar
Veri m_lpDispatch
üyesi, LPDISPATCH türünde bir ortak değişkendir.
Daha fazla bilgi için bkz . Windows SDK'sında IDispatch .
Örnek
COleDispatchDriver::AttachDispatch örneğine bakın.
COleDispatchDriver::operator =
Kaynak değeri nesnesine COleDispatchDriver
kopyalar.
const COleDispatchDriver& operator=(const COleDispatchDriver& dispatchSrc);
Parametreler
dispatchSrc
Var olan COleDispatchDriver
bir nesnenin işaretçisi.
COleDispatchDriver::operator LPDISPATCH
Nesnenin temel işaretçisine IDispatch
erişir COleDispatchDriver
.
operator LPDISPATCH();
Örnek
COleDispatchDriver disp;
if (disp.CreateDispatch(_T("WMPlayer.OCX")))
{
IDispatch* pDispatch = disp; //COleDispatchDriver::operator
//LPDISPATCH is called here
IUnknown* pUnkn = NULL;
HRESULT hr = pDispatch->QueryInterface(IID_IUnknown, (void**)& pUnkn);
if (SUCCEEDED(hr))
{
//Do something...
pUnkn->Release();
}
}
COleDispatchDriver::ReleaseDispatch
Bağlantıyı serbest bırakır IDispatch
. Daha fazla bilgi için bkz . IDispatch Arabirimini Uygulama
void ReleaseDispatch();
Açıklamalar
Bu bağlantı için otomatik yayın ayarlandıysa, bu işlev arabirimi yayınlamadan önce çağırır IDispatch::Release
.
Örnek
COleDispatchDriver::AttachDispatch örneğine bakın.
COleDispatchDriver::SetProperty
dwDispID tarafından belirtilen OLE nesnesi özelliğini ayarlar.
void AFX_CDECL SetProperty(
DISPID dwDispID,
VARTYPE vtProp, ...);
Parametreler
dwDispID
Ayarlanacak özelliği tanımlar.
vtProp
Ayarlanacak özelliğin türünü belirtir. Olası değerler için COleDispatchDriver::InvokeHelper için Açıklamalar bölümüne bakın.
...
vtProp tarafından belirtilen türde tek bir parametre.
Örnek
void IMyComObject::SetString(DISPID dispid, LPCTSTR propVal)
{
SetProperty(dispid, VT_BSTR, propVal);
}
Ayrıca bkz.
MFC Örnek CALCDRIV
MFC Örnek ACDUAL
Hiyerarşi Grafiği
CCmdTarget Sınıfı