#pragma comment(lib, "comsuppw.lib") //加這個庫有什么用
//////////////////////////////////////////////////////////////////////////
// Interfaces imported from flash.ocx
#include <comdef.h> //COM 組件頭文件
#pragma pack(push, 8) //這個不知道是什么意思
namespace ShockwaveFlashObjects //命名空間
{
//
// Forward references and typedefs
//
struct __declspec(uuid("d27cdb6b-ae6d-11cf-96b8-444553540000"))
/* LIBID */ __ShockwaveFlashObjects;
struct __declspec(uuid("d27cdb6c-ae6d-11cf-96b8-444553540000"))
/* dual interface */ IShockwaveFlash;
struct __declspec(uuid("d27cdb6d-ae6d-11cf-96b8-444553540000"))
/* dispinterface */ _IShockwaveFlashEvents;
struct /* coclass */ ShockwaveFlash;
struct /* coclass */ FlashProp;
struct __declspec(uuid("d27cdb70-ae6d-11cf-96b8-444553540000"))
/* interface */ IFlashFactory;
struct __declspec(uuid("d27cdb72-ae6d-11cf-96b8-444553540000"))
/* interface */ IFlashObjectInterface;
struct __declspec(uuid("a6ef9860-c720-11d0-9337-00a0c90dcaa9"))
/* interface */ IDispatchEx;
struct /* coclass */ FlashObjectInterface;
//
// Smart pointer typedef declarations
//
//以上東西不知道有什么用
_COM_SMARTPTR_TYPEDEF(IShockwaveFlash, __uuidof(IShockwaveFlash));
_COM_SMARTPTR_TYPEDEF(_IShockwaveFlashEvents, __uuidof(_IShockwaveFlashEvents));
_COM_SMARTPTR_TYPEDEF(IFlashFactory, __uuidof(IFlashFactory));
_COM_SMARTPTR_TYPEDEF(IDispatchEx, __uuidof(IDispatchEx));
_COM_SMARTPTR_TYPEDEF(IFlashObjectInterface, __uuidof(IFlashObjectInterface));
//以上不知道是什么東西
//
// Type library items
//
struct __declspec(uuid("d27cdb6c-ae6d-11cf-96b8-444553540000"))
IShockwaveFlash : IDispatch
{
//
// Property data
//
//
virtual HRESULT __stdcall get_ReadyState ( //
/*[out,retval]*/ long * thestate ) = 0;
virtual HRESULT __stdcall get_TotalFrames ( // 獲取動畫總幀數
/*[out,retval]*/ long * numframes ) = 0;
virtual HRESULT __stdcall get_Playing ( // 獲取是否播放中
/*[out,retval]*/ VARIANT_BOOL * Playing ) = 0;
virtual HRESULT __stdcall put_Playing ( //
/*[in]*/ VARIANT_BOOL Playing ) = 0;
virtual HRESULT __stdcall get_Quality (
/*[out,retval]*/ int * Quality ) = 0;
virtual HRESULT __stdcall put_Quality (
/*[in]*/ int Quality ) = 0;
virtual HRESULT __stdcall get_ScaleMode (
/*[out,retval]*/ int * scale ) = 0;
virtual HRESULT __stdcall put_ScaleMode (
/*[in]*/ int scale ) = 0;
virtual HRESULT __stdcall get_AlignMode (
/*[out,retval]*/ int * align ) = 0;
virtual HRESULT __stdcall put_AlignMode (
/*[in]*/ int align ) = 0;
virtual HRESULT __stdcall get_BackgroundColor (
/*[out,retval]*/ long * color ) = 0;
virtual HRESULT __stdcall put_BackgroundColor (
/*[in]*/ long color ) = 0;
virtual HRESULT __stdcall get_Loop (
/*[out,retval]*/ VARIANT_BOOL * Loop ) = 0;
virtual HRESULT __stdcall put_Loop (
/*[in]*/ VARIANT_BOOL Loop ) = 0;
virtual HRESULT __stdcall get_Movie (
/*[out,retval]*/ BSTR * path ) = 0;
virtual HRESULT __stdcall put_Movie (
/*[in]*/ BSTR path ) = 0;
virtual HRESULT __stdcall get_FrameNum (
/*[out,retval]*/ long * FrameNum ) = 0;
virtual HRESULT __stdcall put_FrameNum (
/*[in]*/ long FrameNum ) = 0;
virtual HRESULT __stdcall SetZoomRect (
/*[in]*/ long left,
/*[in]*/ long top,
/*[in]*/ long right,
/*[in]*/ long bottom ) = 0;
virtual HRESULT __stdcall Zoom (
/*[in]*/ int factor ) = 0;
virtual HRESULT __stdcall Pan (
/*[in]*/ long x,
/*[in]*/ long y,
/*[in]*/ int mode ) = 0;
virtual HRESULT __stdcall Play ( ) = 0; // 播放
virtual HRESULT __stdcall Stop ( ) = 0; // 停止
virtual HRESULT __stdcall Back ( ) = 0; // 上一幀
virtual HRESULT __stdcall Forward ( ) = 0; //
virtual HRESULT __stdcall Rewind ( ) = 0; // 返回動畫第一幀
virtual HRESULT __stdcall StopPlay ( ) = 0; // 停止播放
virtual HRESULT __stdcall GotoFrame ( // 跳轉到指定幀
/*[in]*/ long FrameNum ) = 0;
virtual HRESULT __stdcall CurrentFrame ( // 返回當前幀
/*[out,retval]*/ long * FrameNum ) = 0;
virtual HRESULT __stdcall IsPlaying ( // 動畫是否正在播放
/*[out,retval]*/ VARIANT_BOOL * Playing ) = 0;
virtual HRESULT __stdcall PercentLoaded ( // 動畫加載的進度百分比
/*[out,retval]*/ long * __MIDL_0011 ) = 0;
virtual HRESULT __stdcall FrameLoaded ( // 幀
/*[in]*/ long FrameNum,
/*[out,retval]*/ VARIANT_BOOL * loaded ) = 0;
virtual HRESULT __stdcall FlashVersion ( // Flash版本
/*[in]*/ VARIANT_BOOL pVal ) = 0;
virtual HRESULT __stdcall get_BGColor (
/*[out,retval]*/ BSTR * pVal ) = 0;
virtual HRESULT __stdcall put_BGColor (
/*[in]*/ BSTR pVal ) = 0;
};
struct __declspec(uuid("d27cdb6d-ae6d-11cf-96b8-444553540000"))
_IShockwaveFlashEvents : IDispatch
{
//
// Wrapper methods for error-handling
//
// Methods:
HRESULT OnReadyStateChange (
long newState );
HRESULT OnProgress (
long percentDone );
HRESULT FSCommand (
_bstr_t command,
_bstr_t args );
};
struct __declspec(uuid("d27cdb6e-ae6d-11cf-96b8-444553540000"))
ShockwaveFlash;
// [ default ] interface IShockwaveFlash
// [ default, source ] dispinterface _IShockwaveFlashEvents
struct __declspec(uuid("1171a62f-05d2-11d1-83fc-00a0c9089c5a"))
FlashProp;
// [ default ] interface IUnknown
struct __declspec(uuid("d27cdb70-ae6d-11cf-96b8-444553540000"))
IFlashFactory : IUnknown
{};
struct __declspec(uuid("a6ef9860-c720-11d0-9337-00a0c90dcaa9"))
IDispatchEx : IDispatch
{
//
// Wrapper methods for error-handling
//
HRESULT GetDispID (
_bstr_t bstrName,
unsigned long grfdex,
long * pid );
HRESULT RemoteInvokeEx (
long id,
unsigned long lcid,
unsigned long dwFlags,
struct DISPPARAMS * pdp,
VARIANT * pvarRes,
struct EXCEPINFO * pei,
struct IServiceProvider * pspCaller,
unsigned int cvarRefArg,
unsigned int * rgiRefArg,
VARIANT * rgvarRefArg );
HRESULT DeleteMemberByName (
_bstr_t bstrName,
unsigned long grfdex );
HRESULT DeleteMemberByDispID (
long id );
HRESULT GetMemberProperties (
long id,
unsigned long grfdexFetch,
unsigned long * pgrfdex );
HRESULT GetMemberName (
long id,
BSTR * pbstrName );
HRESULT GetNextDispID (
unsigned long grfdex,
long id,
long * pid );
HRESULT GetNameSpaceParent (
IUnknown * * ppunk );
//
// Raw methods provided by interface
//
virtual HRESULT __stdcall raw_GetDispID (
/*[in]*/ BSTR bstrName,
/*[in]*/ unsigned long grfdex,
/*[out]*/ long * pid ) = 0;
};
struct __declspec(uuid("d27cdb72-ae6d-11cf-96b8-444553540000"))
IFlashObjectInterface : IDispatchEx
{};
struct __declspec(uuid("d27cdb71-ae6d-11cf-96b8-444553540000"))
FlashObjectInterface;
// [ default ] interface IFlashObjectInterface
} // namespace ShockwaveFlashObjects
#pragma pack(pop)
using namespace ShockwaveFlashObjects;
const CLSID CLSID_ShockwaveFlash =
{ 0xD27CDB6E, 0xAE6D, 0x11cf, {0x96, 0xB8, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00} };
typedef HRESULT (__stdcall *DllGetClassObjectFunc)(REFCLSID rclsid, REFIID riid, LPVOID
問題1:
上面的程序是 flash 自己的
還是 windows 播放 flash 的 Activex ?
2:
#pragma pack(push, 8)
//加一些程序語句
#pragma pack(pop)
這是什么語法?
有什么用?
謝謝!
7 个解决方案
1.像控制加載和播放flash的SDK。
2.http://www.shineblog.com/user3/romanticode/archives/2007/772158.shtml
是一個com組件的接口定義文件。
作用是在程序中加載flash文件並控制其播放,處理flash返回的消息。
HRESULT FSCommand 這個函數是程序和程序內部加載flash之間通訊的時候用的,我用過。
請問一個編譯的問題:
我把導入語句 #import "c:\\windows\\system32\\macromed\\flash\\Flash.ocx" named_guids 改為
#import "c:\\windows\\system32\\macromed\\flash\\Flash10b.ocx" named_guids, 因為我電腦 flash 目錄下就是flash10b.ocx文件, 然后編譯,但是卻出現下面的編譯錯誤,請指教!謝謝
1>正在編譯...
1>flash.cpp
1>e:\codesource\flash\flashwnd.h(972) : error C2039: “IServiceProvider”: 不是“ShockwaveFlashObjects”的成員
1>e:\codesource\flash\flash.cpp(63) : error C2259: “CFlashWnd”: 不能實例化抽象類
1> 由於下列成員:
1> “HRESULT IServiceProvider::QueryService(const GUID &,const IID &,void **)”: 是抽象的
1> c:\program files\microsoft sdks\windows\v6.0a\include\servprov.h(106) : 參見“IServiceProvider::QueryService”的聲明
1>FlashWnd.cpp
1>e:\codesource\flash\flashwnd.h(972) : error C2039: “IServiceProvider”: 不是“ShockwaveFlashObjects”的成員
1>e:\codesource\flash\flashwnd.cpp(107) : error C2039: “IID_IServiceProvider”: 不是“ShockwaveFlashObjects”的成員
1>e:\codesource\flash\flashwnd.cpp(108) : error C2039: “IServiceProvider”: 不是“ShockwaveFlashObjects”的成員
1>e:\codesource\flash\flashwnd.cpp(193) : error C2248: “_com_ptr_t<_IIID>::_AddRef”: 無法訪問 private 成員(在“_com_ptr_t<_IIID>”類中聲明)
1> with
1> [
1> _IIID=_com_IIID<IDirectDraw4,& IID_IDirectDraw4>
1> ]
1> c:\program files\microsoft visual studio 9.0\vc\include\comip.h(830) : 參見“_com_ptr_t<_IIID>::_AddRef”的聲明
1> with
1> [
1> _IIID=_com_IIID<IDirectDraw4,& IID_IDirectDraw4>
1> ]
1>正在生成代碼...
1>生成日志保存在“file://E:\CodeSource\flash\Debug\BuildLog.htm”
1>flash - 6 個錯誤,0 個警告
主要是第一個錯誤:
e:\codesource\flash\flashwnd.h(972) : error C2039: “IServiceProvider”: 不是“ShockwaveFlashObjects”的成員
該怎么解決呢?