Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le code client est l’utilisateur de l’interface COM. Pour utiliser n’importe quelle interface COM, personnalisée ou standard, un client doit connaître son IID. Dans l’exemple suivant, le pilote qui appelle CustomRpt lui transmet le nom de l’objet converti en format de caractère large. Le nom de l’objet est alimenté pour CreateFileMoniker afin qu’un moniker de fichier puisse être créé et que le client puisse établir une liaison à l’objet en cours d’exécution. Une fois l’objet en cours d’exécution, CustomRpt peut accéder à un pointeur vers une interface dans le proxy/stub standard, tel que IPersistFile, ou vers l’interface personnalisée, 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;
}