Using a Custom Interface

The client code is the user of the custom interface. To use any interface, custom or standard, a client must know its IID. In the following function, CustomRpt, the driver that calls CustomRpt passes it the name of the object that is converted to a wide-character format. The object name is fed to CreateFileMoniker so that a file moniker can be created and the client can bind to the running object. Once the object is running, CustomRpt can access a pointer to either an interface in the standard proxy/stub, such as IPersistFile, or to the custom interface, ICustomInterface.

  • oid CustomRpt(char *pszObject)

{

HRESULT hr;

WCHAR szObject[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.

wsprintf(wszObject, 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;

}

Software for developers
Delphi Components
.Net Components
Software for Android Developers
More information resources
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
Databases for Amazon shops developers
Amazon Categories Database
Browse Nodes Database