⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dllexports.cpp

📁 由7-zip提供的压缩、解压缩程序
💻 CPP
字号:
// DLLExports.cpp#include "StdAfx.h"#include "Common/MyInitGuid.h"#include "Common/ComTry.h"#include "MyAES.h"extern "C"DLLEXPORT BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/){	return TRUE;}#define MY_CreateClass(n) \if (*clsid == CLSID_CCrypto_ ## n ## _Encoder) { \    if (!correctInterface) return E_NOINTERFACE; \    filter = (ICompressFilter *)new C ## n ## _Encoder(); \  } else if (*clsid == CLSID_CCrypto_ ## n ## _Decoder){ \    if (!correctInterface) return E_NOINTERFACE; \    filter = (ICompressFilter *)new C ## n ## _Decoder(); \  }STDAPI CreateObject(    const GUID *clsid,     const GUID *interfaceID,     void **outObject){  COM_TRY_BEGIN  *outObject = 0;  int correctInterface = (*interfaceID == IID_ICompressFilter);  CMyComPtr<ICompressFilter> filter;  MY_CreateClass(AES128_CBC)  else  MY_CreateClass(AES256_CBC)  else    return CLASS_E_CLASSNOTAVAILABLE;  *outObject = filter.Detach();  return S_OK;  COM_TRY_END}struct CAESMethodItem{  char ID[3];  const wchar_t *UserName;  const GUID *Decoder;  const GUID *Encoder;};#define METHOD_ITEM(Name, id, UserName) \  { { 0x06, 0x01, id }, UserName, \  &CLSID_CCrypto_ ## Name ## _Decoder, \  &CLSID_CCrypto_ ## Name ## _Encoder }static CAESMethodItem g_Methods[] ={  METHOD_ITEM(AES128_CBC, 0x01, L"AES128"),  METHOD_ITEM(AES256_CBC, char(0x81), L"AES256")};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 CAESMethodItem &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.UserName)) != 0)        value->vt = VT_BSTR;      return S_OK;    case NMethodPropID::kDecoder:      if ((value->bstrVal = ::SysAllocStringByteLen(          (const char *)method.Decoder, sizeof(GUID))) != 0)        value->vt = VT_BSTR;      return S_OK;    case NMethodPropID::kEncoder:      if ((value->bstrVal = ::SysAllocStringByteLen(          (const char *)method.Encoder, sizeof(GUID))) != 0)        value->vt = VT_BSTR;      return S_OK;  }  return S_OK;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -