我这样子创建的:CLSID CLSID_FLASH
= { 0xd27cdb6e, 0xae6d, 0x11cf, { 0x96, 0xb8, 0x44, 0x45, 0x53, 0x54, 0x0, 0x0 } }; IShockwaveFlash * pIFlash; HRESULT hr = CoCreateInstance( CLSID_FLASH, NULL, CLSCTX_INPROC,
IID_IUnknown, (void**)&pIFlash );
if (FAILED(hr))
{
TRACE( "\nError" );
}

解决方案 »

  1.   

    IShockwaveFlash 
    去查 IShockwaveFlash 接口, 应该有Show一类的函数
      

  2.   

    CWnd  m_wnd;
    m_wnd.CreateContorl( CLSID_FLASH, NULL, WS_CHILD|WS_VISIBLE,rc, parentWnd, 1 ); 应该这样创建控件。
      

  3.   

    ATLAPI AtlAxAttachControl(
       IUnknown* pControl,
       HWND hWnd,
       IUnknown** ppUnkContainer 
    );
      

  4.   

    static CAxWindow    WinContainer;
    static CComPtr pFlash;RECT rc;
    GetClientRect(hWnd,&rc);
    WinContainer.Create(hWnd,&rc,LPCTSTR("ShockwaveFlash.ShockwaveFlash"),WS_CHILD | WS_VISIBLE);
    HRESULT hr;
    hr = WinContainer.QueryControl(__uuidof(IShockwaveFlash),(void**)&pFlash);
      

  5.   

    wshcdr:
    IShockwaveFlash是vc根据控件文件自动生成的接口类,没有SHOW方法。
    krh2001(边城浪子) :
    如果控件正确注册的话,使用VC7"添加类"->"ActiveX控件中的MFC类",然后选择根据注册表可以生成一继承自CWnd的类,那就可以用Create,不过我想纯粹使用COM接口或者ATL而不是MFC或者API创建控件。
    谢谢firmbird(firmbird) ,loverx(烟花) ,我想你们的方法更接近我要找的。要动态地加载控件,需要创建一个“AtlAxWin7”宿主窗口并指定此窗口应承载的控件。执行此操作主要有两种方法: 使用标准窗口创建 API 和 ATL 宿主 API。此技术在知识库文章“Adding ATL Control Containment Support to Any Window”(Q192560) 中进行了描述。可以在 MSDN Library 中或 http://support.microsoft.com 上找到知识库文章。 按照如下所述使用 CAxWindow 类: 
    确保已经调用 AtlAxWinInit。 
    AtlAxWinInit();
    AtlAxWinInit 初始化控件宿主代码。 创建一个 CAxWindow 对象: 
    CAxWindow wnd;
    CAxWindow 是一个从 CWindow 派生的用于创建和操作“AtlAxWin7”窗口的包装。 通过调用 Create 创建宿主窗口和控件。 
    RECT rect = { 0, 0, 100, 100 };
    wnd.Create(m_hWnd, rect, _T("MSCAL.Calendar"), WS_CHILD | 
       WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
    传递给 Create 函数的窗口标题(第三个参数)是一个标识要创建的控件的字符串。该字符串可以是一个 CLSID(带有大括号)、ProgID、URL 或原始 HTML(以 MSHTML: 为前缀)。如果提供了 URL 或原始 HTML,则 Web 浏览器将与此信息一起加载。