dllexports.cpp
来自「由7-zip提供的压缩、解压缩程序」· C++ 代码 · 共 92 行
CPP
92 行
// DLLExports.cpp#include "StdAfx.h"#include "Common/MyInitGuid.h"#include "Common/ComTry.h"#include "ByteSwap.h"#include "../../ICoder.h"extern "C"DLLEXPORT BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/){ return TRUE;}STDAPI CreateObject(const GUID *clsid, const GUID *iid, void **outObject){ COM_TRY_BEGIN *outObject = 0; int correctInterface = (*iid == IID_ICompressFilter); CMyComPtr<ICompressFilter> coder; if (*clsid == CLSID_CCompressConvertByteSwap2) { if (!correctInterface) return E_NOINTERFACE; coder = (ICompressFilter *)new CByteSwap2(); } else if (*clsid == CLSID_CCompressConvertByteSwap4) { if (!correctInterface) return E_NOINTERFACE; coder = (ICompressFilter *)new CByteSwap4(); } else return CLASS_E_CLASSNOTAVAILABLE; *outObject = coder.Detach(); COM_TRY_END return S_OK;}struct CSwapMethodInfo{ char ID[3]; const wchar_t *Name; const GUID *clsid;};static CSwapMethodInfo g_Methods[] ={ { { 0x2, 0x03, 0x02 }, L"Swap2", &CLSID_CCompressConvertByteSwap2 }, { { 0x2, 0x03, 0x04 }, L"Swap4", &CLSID_CCompressConvertByteSwap4 }};STDAPI GetNumberOfMethods(UINT32 *numMethods){ *numMethods = sizeof(g_Methods) / sizeof(g_Methods[1]); return S_OK;} STDAPI GetMethodProperty(UINT32 index, PROPID propID, PROPVARIANT *value){ if (index > sizeof(g_Methods) / sizeof(g_Methods[1])) return E_INVALIDARG; ::VariantClear((tagVARIANT *)value); const CSwapMethodInfo &method = g_Methods[index]; switch(propID) { case NMethodPropID::kID: { if ((value->bstrVal = ::SysAllocStringByteLen(method.ID, sizeof(method.ID))) != 0) value->vt = VT_BSTR; return S_OK; } case NMethodPropID::kName: { if ((value->bstrVal = ::SysAllocString(method.Name)) != 0) value->vt = VT_BSTR; return S_OK; } case NMethodPropID::kDecoder: case NMethodPropID::kEncoder: { if ((value->bstrVal = ::SysAllocStringByteLen( (const char *)method.clsid, sizeof(GUID))) != 0) value->vt = VT_BSTR; return S_OK; } } return S_OK;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?