diff options
Diffstat (limited to 'CPP/7zip/FileManager/PluginLoader.h')
-rwxr-xr-x | CPP/7zip/FileManager/PluginLoader.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/CPP/7zip/FileManager/PluginLoader.h b/CPP/7zip/FileManager/PluginLoader.h new file mode 100755 index 00000000..598a874b --- /dev/null +++ b/CPP/7zip/FileManager/PluginLoader.h @@ -0,0 +1,32 @@ +// PluginLoader.h + +#ifndef __PLUGINLOADER_H +#define __PLUGINLOADER_H + +#include "Windows/DLL.h" + +typedef UINT32 (WINAPI * CreateObjectPointer)( + const GUID *clsID, + const GUID *interfaceID, + void **outObject); + +class CPluginLibrary: public NWindows::NDLL::CLibrary +{ +public: + HRESULT CreateManager(REFGUID clsID, IFolderManager **manager) + { + CreateObjectPointer createObject = (CreateObjectPointer) + GetProcAddress("CreateObject"); + if (createObject == NULL) + return GetLastError(); + return createObject(&clsID, &IID_IFolderManager, (void **)manager); + } + HRESULT LoadAndCreateManager(LPCWSTR filePath, REFGUID clsID, IFolderManager **manager) + { + if (!Load(filePath)) + return GetLastError(); + return CreateManager(clsID, manager); + } +}; + +#endif |