#include "pch.h" #pragma hdrstop #include "upnphost.h" #include #include "resource.h" #include "CInternetGatewayDevice.h" #include "..\idl\obj\i386\InternetGatewayDevice_i.c" #include "CWANDevice.h" #include "CWANCommonDevice.h" CComModule _Module; BEGIN_OBJECT_MAP(ObjectMap) END_OBJECT_MAP() void Test() { HRESULT hr = S_OK; IUPnPRegistrar* pRegistrar; hr = CoCreateInstance(CLSID_UPnPRegistrar, NULL, CLSCTX_SERVER, IID_IUPnPRegistrar, reinterpret_cast(&pRegistrar)); if(SUCCEEDED(hr)) { HRSRC hrsrc = FindResource(GetModuleHandle(NULL), MAKEINTRESOURCE(IDX_DESC_DOC), L"XML"); if(hrsrc) { HGLOBAL hGlobal = LoadResource(GetModuleHandle(NULL), hrsrc); if(hGlobal) { void * pvData = LockResource(hGlobal); BSTR bstrData = NULL; if(pvData) { long nLength = SizeofResource(GetModuleHandle(NULL), hrsrc); wchar_t * sz = new wchar_t[nLength + 1]; MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, reinterpret_cast(pvData), nLength, sz, nLength); sz[nLength] = 0; bstrData = SysAllocString(sz); delete [] sz; } if(bstrData) { BSTR bstrId = NULL; BSTR bstrInitString = SysAllocString(L"Init"); BSTR bstrPath = SysAllocString(L"C:\\upnp\\"); IUPnPDeviceControl* pDevice; //hr = CoCreateInstance(CLSID_CInternetGatewayDevice, NULL, CLSCTX_INPROC, IID_IUPnPDeviceControl, reinterpret_cast(&pDevice)); CComObject* pDevice2; hr = CComObject::CreateInstance(&pDevice2); if(SUCCEEDED(hr)) { pDevice = pDevice2; pDevice->AddRef(); } if(SUCCEEDED(hr)) { wchar_t szFilename[1024]; GetModuleFileName(NULL, szFilename, 1024); ITypeLib * pTlb = NULL; hr = LoadTypeLib(L"beacon.exe", &pTlb); pTlb->Release(); if(FAILED(hr)) { printf("type lib failed\n"); } } if(SUCCEEDED(hr)) { hr = pRegistrar->RegisterRunningDevice( bstrData, pDevice, bstrInitString, bstrPath, 10, &bstrId); if(FAILED(hr)) { printf("rrd failed %x\n", hr); IErrorInfo* pErrorInfo; hr = GetErrorInfo(0, &pErrorInfo); if(S_OK == hr) { BSTR pDesc; hr = pErrorInfo->GetDescription(&pDesc); if(SUCCEEDED(hr)) { wprintf(L"error desc %s\n", pDesc); SysFreeString(pDesc); } } hr = E_FAIL; } printf("press q to exit, u to update connection status\n"); char buf[255]; while(gets(buf)) { if('q' == *buf) { break; } else if('u' == *buf) { CComObject* pWANDevice = pDevice2->m_pWANDevice; CComObject* pWANCommonDevice = pWANDevice->m_pWANCommonDevice; pWANCommonDevice->UpdateConnectionStatus(); } } if(SUCCEEDED(hr)) { hr = pRegistrar->UnregisterDevice(bstrId, TRUE); if(FAILED(hr)) { printf("rrd failed\n"); } } } SysFreeString(bstrInitString); SysFreeString(bstrPath); if(SUCCEEDED(hr)) { SysFreeString(bstrId); } SysFreeString(bstrData); } FreeResource(hGlobal); } } } } void TestDisconnect() { // CLanControl LanControl; // // // LanControl.FinalConstruct(); // LanControl.Disconnect(); } void TestConnect() { // CLanControl LanControl; // // LanControl.FinalConstruct(); // LanControl.Connect(); } int __cdecl main(int argc, char* argv[]) { CoInitializeEx(NULL, COINIT_MULTITHREADED); _Module.Init(ObjectMap, GetModuleHandle(NULL), &LIBID_UPnPInternetGatewayDeviceLib); Test(); // if(argc == 1) // { // TestConnect(); // } // else // { // TestDisconnect(); // } _Module.Term(); CoUninitialize(); return 0; }