Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Kod klienta jest użytkownikiem interfejsu COM. Aby użyć dowolnego interfejsu COM, niestandardowego lub standardowego, klient musi znać jego identyfikator IID. W poniższym przykładzie sterownik, który wywołuje element CustomRpt, przekazuje mu nazwę obiektu, przekonwertowaną na format znaków szerokich. Nazwa obiektu jest podawana do CreateFileMoniker, aby można było utworzyć moniker pliku i klient może powiązać z uruchomionym obiektem. Po uruchomieniu obiektu, CustomRpt może uzyskać dostęp do wskaźnika na interfejs w standardowym serwerze proxy/obiekcie typu stub, takim jak IPersistFile, lub na interfejs niestandardowy ICustomInterface.
void CustomRpt(char *pszObject)
{
HRESULT hr;
WCHAR wszObject[128];
WCHAR wszMsg[128] = {L"Your Message Here...\n"};
IMoniker *pmkObject = NULL;
IUnknown *pIUnk = NULL;
IPersistFile *pIPersistFile = NULL;
ICustomInterface *pICustomInterface = NULL;
// Create a wide-character version of the object's file name.
StringCchPrintf(wszObject, 128, L"%hs", pszObject);
// Get a file moniker for the object (a *.smp file).
hr = CreateFileMoniker(wszObject, &pmkObject);
if(FAILED(hr))
{
printf("Client: CreateFileMoniker for Object failed");
return;
}
// BindMoniker is equivalent to calling CreateBindCtx() followed by
// a call to BindToObject(). It has the net result of binding the
// interface (specified by the IID) to the moniker.
hr = BindMoniker(pmkObject, 0, IID_IUnknown, (void **)&pIUnk);
if (FAILED(hr))
{
printf("Client: BindMoniker failed (%x)\n", hr);
return;
}
// Try a couple QueryInterface calls into the object code; first a
// QueryInterface to IPersistFile...
hr = pIUnk->QueryInterface(IID_IPersistFile, (void **)&pIPersistFile);
if (FAILED(hr)) {
printf("Client: QueryInterface IPersistFile failed (%x)\n", hr);
pIUnk->Release();
return;
}
// Followed by a QueryInterface to ICustomInterface.
hr = pIUnk->QueryInterface(IID_ICustomInterface, (void **)&pICustomInterface);
if (FAILED(hr)) {
printf("Client: QueryInterface failed (%x)\n", hr);
pIUnk->Release();
pIPersistFile->Release();
return;
}
// CustomReport() is the object function that displays the time and
// date information on the object.
hr = pICustomInterface->CustomReport();
if (FAILED(hr))
{
printf("Client: pICustomInterface->CustomReport failed (%x)\n", hr);
pIUnk->Release();
pIPersistFile->Release();
return;
}
// Clean up resources by calling release on each of the interfaces.
pIPersistFile->Release();
pICustomInterface->Release();
pIUnk->Release();
return;
}