Source code
Revision control
Copy as Markdown
Other Tools
// Windows/DLL.h↩
↩
#ifndef __WINDOWS_DLL_H↩
#define __WINDOWS_DLL_H↩
↩
#include "../Common/MyString.h"↩
↩
namespace NWindows {↩
namespace NDLL {↩
↩
#ifdef UNDER_CE↩
#define My_GetProcAddress(module, procName) ::GetProcAddressA(module, procName)↩
#else↩
#define My_GetProcAddress(module, procName) ::GetProcAddress(module, procName)↩
#endif↩
↩
/* Win32: Don't call CLibrary::Free() and FreeLibrary() from another↩
FreeLibrary() code: detaching code in DLL entry-point or in↩
destructors of global objects in DLL module. */↩
↩
class CLibrary↩
{↩
HMODULE _module;↩
↩
// CLASS_NO_COPY(CLibrary);↩
public:↩
CLibrary(): _module(NULL) {};↩
~CLibrary() { Free(); }↩
↩
operator HMODULE() const { return _module; }↩
HMODULE* operator&() { return &_module; }↩
bool IsLoaded() const { return (_module != NULL); }↩
↩
void Attach(HMODULE m)↩
{↩
Free();↩
_module = m;↩
}↩
HMODULE Detach()↩
{↩
HMODULE m = _module;↩
_module = NULL;↩
return m;↩
}↩
↩
bool Free() throw();↩
bool LoadEx(CFSTR path, DWORD flags = LOAD_LIBRARY_AS_DATAFILE) throw();↩
bool Load(CFSTR path) throw();↩
FARPROC GetProc(LPCSTR procName) const { return My_GetProcAddress(_module, procName); }↩
};↩
↩
bool MyGetModuleFileName(FString &path);↩
↩
FString GetModuleDirPrefix();↩
↩
}}↩
↩
#endif↩