S.l.e!ep.¢%

像打了激速一样,以四倍的速度运转,开心的工作
简单、开放、平等的公司文化;尊重个性、自由与个人价值;
posts - 1098, comments - 335, trackbacks - 0, articles - 1
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

get flash ocx version

Posted on 2009-09-07 11:37 S.l.e!ep.¢% 阅读(386) 评论(1)  编辑 收藏 引用 所属分类: COM

在网上看到一篇get flash version 的代码觉得不错

class CFlashocx 
{
public:
 CFlashocx();
 virtual ~CFlashocx();
 
 CString getVersion();
};

#include "stdafx.h"
#include "flashocx.h"
#include "comdef.h"
#include <atlbase.h>

#define COMR_CHECK(x) \
do \
{  \
if( FAILED(x) ) \
_com_issue_error((x)); \
} while (0) \

#ifdef _WIN32
#define LOADLIBRARY_FAILED(x) (x == 0)
#else
#define LOADLIBRARY_FAILED(x) (x <= HINSTANCE_ERROR)
#endif

STDAPI DllRegisterServer(void) ;
typedef HRESULT (STDAPICALLTYPE *CTLREGPROC)();

CFlashocx::CFlashocx()
{

}

CFlashocx::~CFlashocx()
{

}

CString CFlashocx::getVersion()
{
 USES_CONVERSION;
 CString strVersion;

 try
 {
  CoInitialize(NULL); 

  wchar_t progid[] = L"ShockwaveFlash.ShockwaveFlash";
  CLSID clsid;
  COMR_CHECK(::CLSIDFromProgID(progid, &clsid));
  
  // get the IDispatch Interface
  IDispatch* pIDispatch = NULL;
  COMR_CHECK(::CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, IID_IDispatch, (void**)&pIDispatch));

  BSTR szMember = OLESTR("FlashVersion");
  DISPID dispid;
  
  COMR_CHECK(pIDispatch->GetIDsOfNames(IID_NULL, &szMember, 1, LOCALE_USER_DEFAULT, &dispid));

  DISPPARAMS dispParams = {NULL,   NULL,   0,   0};  ;
  VARIANT    varResult;
 
  COMR_CHECK(pIDispatch->Invoke(dispid, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD,
         &dispParams, &varResult, NULL, NULL));

  strVersion.Format(_T("%x"), varResult.intVal);

  CString strDevVersion;
       
  strDevVersion = strVersion.Left(strVersion.GetLength() - 4);
  long nVersion = strtol(T2A(strDevVersion), NULL, 16);
        strVersion.Format(_T("%ld"), nVersion);

  strVersion = strVersion + _T("0000");


  pIDispatch->Release();

  CoUninitialize();
 }
 catch (_com_error& e)
 {
  e;
  strVersion = _T("0000");
 }


 return strVersion;
}

Feedback

# re: get flash ocx version[未登录]  回复  更多评论   

2009-09-07 12:50 by Davy.xu
觉得还是用ATL比较好,我用的是手写的COM框架,居然flash卸载后重新加载会有2~5M内存泄漏

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理