diff options
Diffstat (limited to 'cpp/test/uwp/controller/ViewController.xaml.cpp')
-rw-r--r-- | cpp/test/uwp/controller/ViewController.xaml.cpp | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/cpp/test/uwp/controller/ViewController.xaml.cpp b/cpp/test/uwp/controller/ViewController.xaml.cpp index 49d5a2bba4c..281e973f519 100644 --- a/cpp/test/uwp/controller/ViewController.xaml.cpp +++ b/cpp/test/uwp/controller/ViewController.xaml.cpp @@ -198,6 +198,7 @@ MainHelperI::run() if(_dllTestShutdown == 0) { print("failed to find dllTestShutdown function from `" + _dll + "'"); + _controller->unloadDll(_dll); completed(EXIT_FAILURE); return; } @@ -206,6 +207,7 @@ MainHelperI::run() if(sym == 0) { print("failed to find dllMain function from `" + _dll + "'"); + _controller->unloadDll(_dll); completed(EXIT_FAILURE); return; } @@ -232,6 +234,7 @@ MainHelperI::run() completed(EXIT_FAILURE); } delete[] argv; + _controller->unloadDll(_dll); }); _thread = move(t); } @@ -459,17 +462,6 @@ ViewController::getHost() const } void -ViewController::OnNavigatedTo(NavigationEventArgs^) -{ - if(controllerHelper) - { - delete controllerHelper; - controllerHelper = 0; - } - controllerHelper = new ControllerHelper(this); -} - -void ViewController::Hostname_SelectionChanged(Platform::Object^, Windows::UI::Xaml::Controls::SelectionChangedEventArgs^) { if(controllerHelper) @@ -495,22 +487,33 @@ ViewController::println(const string& s) HINSTANCE ViewController::loadDll(const string& name) { - map<string, HINSTANCE>::const_iterator p = _dlls.find(name); - if(p != _dlls.end()) + map<string, pair<HINSTANCE, unsigned int>>::iterator p = _dlls.find(name); + if(p == _dlls.end()) { - return p->second; + HINSTANCE hnd = LoadPackagedLibrary(Ice::stringToWstring(name).c_str(), 0); + p = _dlls.insert(make_pair(name, make_pair(hnd, 0))).first; } - HINSTANCE hnd = LoadPackagedLibrary(Ice::stringToWstring(name).c_str(), 0); - _dlls.insert(make_pair(name, hnd)); + ++p->second.second; + return p->second.first; +} - return hnd; +void +ViewController::unloadDll(const string& name) +{ + map<string, pair<HINSTANCE, unsigned int>>::iterator p = _dlls.find(name); + assert(p != _dlls.end()); + if(--p->second.second == 0) + { + FreeLibrary(p->second.first); + _dlls.erase(p); + } } ViewController::~ViewController() { - for(map<string, HINSTANCE>::const_iterator p = _dlls.begin(); p != _dlls.end(); ++p) + for(map<string, pair<HINSTANCE, unsigned int>>::const_iterator p = _dlls.begin(); p != _dlls.end(); ++p) { - FreeLibrary(p->second); + FreeLibrary(p->second.first); } if(controllerHelper) |