WindowsXP-SP1/admin/burnslib/src/safedll.cpp
2020-09-30 16:53:49 +02:00

64 lines
1013 B
C++

// Copyright (c) 1997-1999 Microsoft Corporation
//
// Self-freeing DLL class
//
// 10-9-98 sburns
#include "headers.hxx"
SafeDLL::SafeDLL(const String& dllName)
:
module(0),
name(dllName)
{
LOG_CTOR(SafeDLL);
ASSERT(!name.empty());
}
SafeDLL::~SafeDLL()
{
LOG_DTOR(SafeDLL);
if (module)
{
HRESULT unused = Win::FreeLibrary(module);
ASSERT(SUCCEEDED(unused));
}
}
HRESULT
SafeDLL::GetProcAddress(const String& functionName, FARPROC& result) const
{
LOG_FUNCTION2(SafeDLL::GetProcAddress, functionName);
ASSERT(!functionName.empty());
result = 0;
HRESULT hr = S_OK;
do
{
// load the dll if not already loaded.
if (!module)
{
hr = Win::LoadLibrary(name, module);
}
BREAK_ON_FAILED_HRESULT(hr);
hr = Win::GetProcAddress(module, functionName, result);
BREAK_ON_FAILED_HRESULT(hr);
}
while (0);
return hr;
}