Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
WPD Automation can be instantiated from C++/COM by CoCreating IPortableDeviceDispatchFactory and calling IPortableDeviceDispatchFactory::GetDeviceDispatch, supplying a Device Plug and Play (PnP) identifier. The DevicePnPId is a string that represents a WPD device, and is returned by the IPortableDeviceManager::GetDevices method in the WPD C++/COM API.
The following example shows how to instantiate and return a WPD Automation Device object. The code can be wrapped in an IDispatch method for an ActiveX object that is accessible from JScript.
IFACEMETHODIMP CMyDeviceFactory::GetFirstDeviceObject(IDispatch** ppDeviceObject)
{
ComPtr<IPortableDeviceManager> spDeviceManager;
HRESULT hr = CoCreateInstance(CLSID_PortableDeviceManager,
NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&spDeviceManager));
if (SUCCEEDED(hr))
{
// For simplicity, the following code sample retrieves the first
// device, if available.
LPWSTR pszDevicePnPID = NULL;
DWORD cDevices = 1;
hr = spDeviceManager->GetDevices(pszDevicePnPID, &cDevices);
if (SUCCEEDED(hr) && cDevices > 0)
{
CComPtr<IPortableDeviceDispatchFactory> spDeviceDispatchFactory;
hr = CoCreateInstance(CLSID_PortableDeviceDispatchFactory, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&spDeviceDispatchFactory));
if (SUCCEEDED(hr))
{
hr = spDeviceDispatchFactory->GetDeviceDispatch(pszDevicePnPID, ppDeviceObject);
}
}
CoTaskMemFree(pszDevicePnPID);
}
return hr;
}
The following example shows how to instantiate a Device object from JScript by calling CMyDeviceFactory through IDispatch.
var deviceFactory = new ActiveXObject("MyControl.MyDeviceFactory");
// Get the first device object from the device factory
var deviceObject = deviceFactory.GetFirstDeviceObject();
Related topics