sync with trunk r46493
[reactos.git] / dll / directx / msdvbnp / msdvbnp.cpp
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Network Provider for MPEG2 based networks
4 * FILE: dll/directx/msdvbnp/msdvbnp.cpp
5 * PURPOSE: COM Initialization
6 *
7 * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org)
8 */
9
10 #include "precomp.h"
11
12 static INTERFACE_TABLE InterfaceTable[] =
13 {
14 {&CLSID_DVBTNetworkProvider, CNetworkProvider_fnConstructor},
15 {NULL, NULL}
16 };
17
18 extern "C"
19 BOOL
20 WINAPI
21 DllMain(
22 HINSTANCE hInstDLL,
23 DWORD fdwReason,
24 LPVOID lpvReserved)
25 {
26 switch (fdwReason)
27 {
28 case DLL_PROCESS_ATTACH:
29 CoInitialize(NULL);
30
31 #ifdef MSDVBNP_TRACE
32 OutputDebugStringW(L"MSDVBNP::DllMain()\n");
33 #endif
34
35 DisableThreadLibraryCalls(hInstDLL);
36 break;
37 default:
38 break;
39 }
40
41 return TRUE;
42 }
43
44
45 extern "C"
46 KSDDKAPI
47 HRESULT
48 WINAPI
49 DllUnregisterServer(void)
50 {
51 return S_OK;
52 }
53
54 extern "C"
55 KSDDKAPI
56 HRESULT
57 WINAPI
58 DllRegisterServer(void)
59 {
60 return S_OK;
61 }
62
63 KSDDKAPI
64 HRESULT
65 WINAPI
66 DllGetClassObject(
67 REFCLSID rclsid,
68 REFIID riid,
69 LPVOID *ppv)
70 {
71 UINT i;
72 HRESULT hres = E_OUTOFMEMORY;
73 IClassFactory * pcf = NULL;
74
75 if (!ppv)
76 return E_INVALIDARG;
77
78 *ppv = NULL;
79
80 for (i = 0; InterfaceTable[i].riid; i++)
81 {
82 if (IsEqualIID(*InterfaceTable[i].riid, rclsid))
83 {
84 pcf = CClassFactory_fnConstructor(InterfaceTable[i].lpfnCI, NULL, NULL);
85 break;
86 }
87 }
88
89 if (!pcf)
90 {
91 return CLASS_E_CLASSNOTAVAILABLE;
92 }
93
94 hres = pcf->QueryInterface(riid, ppv);
95 pcf->Release();
96
97 return hres;
98 }
99
100 KSDDKAPI
101 HRESULT
102 WINAPI
103 DllCanUnloadNow(void)
104 {
105 return S_OK;
106 }