#include "stdafx.h"
#include "publicInterface.h"
HRESULT CreateFilter(BSTR bstrLibName, REFCLSID rclsid, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID* ppv)
{
HINSTANCE hDLL = CoLoadLibrary(bstrLibName, TRUE);
if (hDLL == NULL)
{
return HRESULT_FROM_WIN32(GetLastError());
}
typedef HRESULT(WINAPI* PFNDllGetClassObject)(REFCLSID rclsid, REFIID riid, LPVOID* ppv);
PFNDllGetClassObject pfnDllGetClassObject = (PFNDllGetClassObject)GetProcAddress(hDLL, "DllGetClassObject");
if (!pfnDllGetClassObject)
{
return HRESULT_FROM_WIN32(GetLastError());
}
CComPtr<IClassFactory> pFactory;
HRESULT hr = pfnDllGetClassObject(rclsid, IID_IClassFactory, (LPVOID*)&pFactory);
if (hr != S_OK)
{
return hr;
}
return pFactory->CreateInstance(pUnkOuter, riid, ppv);