MFC ActiveX 工程中使用flash控件动态创建到这个ActiveX上,在IE中CLSID定义出来后调用封装好的flash功能!我用的方式是#import "xxx\flash.ocx" no_namespace rename("","")
有个接口重定义了。然后用的
//定义flash,CLSID
static CLSID const clsid =
 { 0xd27cdb6e, 0xae6d, 0x11cf, { 0x96, 0xb8, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0 } };
IClassFactory *icf=(0);//工厂
IShockwaveFlash *sf=(0);//flash object
//获得工厂就失败了。下边的代码执行就崩溃
CoGetClassObject(clsid,CLSCTX_SERVER,NULL,__IDD(ShockwaveFlash),(LPVOID*)&icf );     
icf->QueryInterface(__uuidof(IShockwaveFlash),(VOID**)sf);
sf->Movie="D:\\opop\\ff.swf";//ff.swf加入了一个mp3打开就播放
sf->Play()//开始播放但是如何把flash窗体显示到ActiveX控件,然后播放呢?困惑请各位兄弟姐妹解答!

解决方案 »

  1.   

    哦发错了一些代码
    MFC ActiveX 工程中使用flash控件动态创建到这个ActiveX上,在IE中CLSID定义出来后调用封装好的flash功能!我用的方式是:
    //有个接口重定义了
    #import "xxx\flash.ocx" no_namespace rename("IServiceProvider","IServiceProviderO")
    然后用的
    //定义flash,CLSID
    static CLSID const clsid =
     { 0xd27cdb6e, 0xae6d, 0x11cf, { 0x96, 0xb8, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0 } };
    IClassFactory *icf=(0);//工厂
    IShockwaveFlash *sf=(0);//flash object
    //获得工厂的时候就失败了。下边的代码执行就崩溃
    CoGetClassObject(clsid,CLSCTX_SERVER,NULL,__uuidof(IFlashFactory),(LPVOID*)&icf );     
    icf->QueryInterface(__uuidof(IShockwaveFlash),(VOID**)sf);
    sf->Movie="D:\\opop\\ff.swf";//ff.swf加入了一个mp3打开就播放
    sf->Play()//开始播放但是如何把flash窗体显示到ActiveX控件,然后播放呢?困惑请各位兄弟姐妹解答!
      

  2.   

    CoGetClassObject是查询现有对象
    你应该使用CoCreateInstance来创建ActiveX
    参考http://blog.joycode.com/jiangsheng/archive/2004/12/15/41209.aspx
      

  3.   

    const IID IID_FLASH = {0xd27cdb6c,0xae6d,0x11cf,{0x96,0xb8,0x44,0x45,0x53,0x54,0x00,0x00}};
    const CLSID CLSID_FLASH = {0xD27CDB6E,0xAE6D,0x11CF,{0x96,0xB8,0x44,0x45,0x53,0x54,0x00,0x0}};HRESULT hr = CoInitialize( NULL );
    if( SUCCEEDED(hr) )
    {
    hr = CoCreateInstance( CLSID_FLASH, NULL, CLSCTX_INPROC_SERVER, IID_FLASH, (void**)&g_pFlash );
    if( SUCCEEDED(hr) )
    { // 播放
    g_pFlash->LoadMovie( 0, "F:\\Test\\WIN32Test\\AAA.swf" );
    g_pFlash->Play();
    }
    }
      

  4.   

    STDAPI CoGetClassObject(
      REFCLSID rclsid,  //CLSID associated with the class object
      DWORD dwClsContext,
                        //Context for running executable code
      COSERVERINFO * pServerInfo,
                        //Pointer to machine on which the object is to 
                        // be instantiated
      REFIID riid,      //Reference to the identifier of the interface
      LPVOID * ppv      //Address of output variable that receives the 
                        // interface pointer requested in riid
    );
      

  5.   

    static CLSID const clsid
    = { 0xd27cdb6e, 0xae6d, 0x11cf, { 0x96, 0xb8, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0 } };
    const IID IID_FLASH = {0xd27cdb6c,0xae6d,0x11cf,{0x96,0xb8,0x44,0x45,0x53,0x54,0x00,0x00}}; HRESULT result=(0);
    IClassFactory *icf=(0);
    IShockwaveFlash *sf=(0);
    result = CoInitialize(NULL); if(SUCCEEDED(result))
    {
    result = CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,__uuidof(IShockwaveFlash),(VOID**)&sf);
    if(SUCCEEDED(result))
    {
    result = sf->LoadMovie(0,"E:\\opop\\ff.swf");
    if(SUCCEEDED(result))
    { result = sf->Play();
    if(SUCCEEDED(result))
    {}
    else
    MessageBox(_T("打开文件失败!"));
    }
    else
    {
    MessageBox(_T("打开文件失败!"));
    }
    }
    else
    {
    MessageBox(_T("创建对象失败"));
    }
    }
    else
    {
    MessageBox(_T("初始化失败"));
    }
    代码执行没问题。。但是play执行以后没反映。。我的这个flash插入了一个mp3直接播放的。。
      

  6.   

    http://www.vckbase.com/document/viewdoc/?id=285
      

  7.   

    to kingzai(stevenzhu) 
      您发的地址我看过了不是我要的。。他讲的是先insert ActiveX Control,然后创建flash Control的一个映射,再进行操作。
      我问的是#import 进来,然后通过一些com函数实现播放和显示
      

  8.   

    http://blog.joycode.com/jiangsheng/archive/2004/12/15/41209.aspx
      

  9.   

    我试了下其他方法。弄了个dialog的实列然后create到控件上。。在activex上边可以显示出来。但是再web里什么也看不见