求助,下面這段程序有什么用?(是不是一個 庫的頭文件),謝謝!


#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


1.像控制加載和播放flash的SDK。
2.http://www.shineblog.com/user3/romanticode/archives/2007/772158.shtml

#2


是一個com組件的接口定義文件。
作用是在程序中加載flash文件並控制其播放,處理flash返回的消息。
HRESULT FSCommand  這個函數是程序和程序內部加載flash之間通訊的時候用的,我用過。

#3


學習中

#4


謝謝!

#5


請問一個編譯的問題:
我把導入語句 #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 個警告

#6


主要是第一個錯誤:

e:\codesource\flash\flashwnd.h(972) : error C2039: “IServiceProvider”: 不是“ShockwaveFlashObjects”的成員 

該怎么解決呢?

#7


使用no_auto_exclude

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com