• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 大问题,精通Com的进来,关于控件容器方面!

大问题,精通Com的进来,关于控件容器方面!

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了真心话大冒险经典问题,真心话大冒险问题集,这个美术社大有问题,真心话大冒险问题,大冒险问题等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 大问题,精通Com的进来,关于控件容器方面!
描述:

此问题我已卡住很多天了,VCKbase,微软新闻组都问过了,仍没有解决!
环境:
工具:VC.net
项目类型:支持MFC的动态链接库
功能:
首次加载此DLL时会注册一个窗口类,并且负责管理此窗口类的消
息。
目的:
1、我要在这个窗口类的某条消息中创建FLASH动画
通常方法:
1、网上有人提供了MFC下的CShockwareFlash类,在MFC应用程序下
很好用,但是用在此项目中会出错误。是容器错误。
2、Win32应用程序下可以使用一个CAxWindow的东西,也很简单好
用,但在此项目中失败。
请高人指点迷津,卡住很多天了。最好能告诉我如何不用MFC或者
什么容器之类的东西就能实现的方式。能不能通过查找注册表查看
用户安装的FLASH版本及其相应的文件位置,然后加载那个ocx文件
我自己调用里面的函数这样从最原始的方式创建FLASH?
现在我直接用控件里的CShockwareFlash类实现FLASH出错:
/**********************堆栈:
>mfc71d.dll!CWnd::InvokeHelper(long dwDispID=142, unsigned short wFlags=1, unsigned short vtRet=0, void * pvRet=0x00000000, const unsigned char * pbParamInfo=0x1003a944, ...)  行374 + 0x3 C++
 Really.dll!CShockwaveFlash::LoadMovie(long layer=0, const char * url=0x10034ad4)  行317 + 0x21 C++
 Really.dll!CReallyApp::Add_Flash(tagPOINT pt={...})  行674 C++
 Really.dll!CReallyApp::WndProc(HWND__ * hWnd=0x000506f6, unsigned int message=273, unsigned int wParam=32772, long lParam=0)  行493 C++
/**********************出错的OLE代码:
//////////////////////////////////////////
// CWnd invoke helpers for OLE Control wrappers
void AFX_CDECL CWnd::InvokeHelper(DISPID dwDispID, WORD wFlags, VARTYPE vtRet,
void* pvRet, const BYTE* pbParamInfo, ...)
{
ASSERT(m_pCtrlSite != NULL);    // not an OLE control (not yet, at least)
if (m_pCtrlSite == NULL)
return;
va_list argList;
va_start(argList, pbParamInfo);
m_pCtrlSite->InvokeHelperV(dwDispID, wFlags, vtRet, pvRet, pbParamInfo,
argList);
va_end(argList);
}
/**********************异常提示:
DllTestSdk.exe 中的 0x7c239fd7 (mfc71d.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000050 时发生访问冲突 。
/**********************输出:
Warning: constructing COleException, scode = DISP_E_MEMBERNOTFOUND ($80020003).
DllTestSdk.exe 中的 0x77e53887 处最可能的异常: Microsoft C++ exception: COleException @ 0x0012e59c 。
Warning: constructing COleException, scode = DISP_E_MEMBERNOTFOUND ($80020003).
DllTestSdk.exe 中的 0x77e53887 处最可能的异常: Microsoft C++ exception: COleException @ 0x0012e59c 。
DllTestSdk.exe 中的 0x7c239fd7 (mfc71d.dll) 处最可能的异常: 0xC0000005: 读取位置 0x00000050 时发生访问冲突 。
DllTestSdk.exe 中的 0x7c239fd7 (mfc71d.dll) 处未处理的异常: 0xC0000005: 读取位置 0x00000050 时发生访问冲突 。
我需要一个安全的可以在只有一个HWND的情况下可以使用FLASH的方法,谢谢!


解决方案1:

看有用没有
com的优越就不多说,使用atl开发com方便而快捷,并且具有size小,dependency少的特点。vc++的import 编译支持更是对com开发的巨大支持。闲话休说,这就开始吧。
  一.flash组件
        1.atl com appwizard创建新项目"atlflash",选择dll类型。
        2.加入atl object "flash"
            insert ->  new atl object
            选择object中的simple object,
            short name:“flash”
        3.接口添加method “play”
            参数为:[in]bstr bstrfile,[in]long hinstance,[in]long hwnd
        4.在cflash类中加入:
            private:
                      hwnd m_hwnd;//视频窗口句柄
        5. 实现play方法。
stdmethodimp cflash::play(bstr bstrfile, long hinstance, long hwnd)
{
    try{
        m_hmciwnd=(hwnd)hwnd;
        _bstr_t file(bstrfile);
        m_hmciwnd=::mciwndcreate((hwnd)hwnd,(hinstance)hinstance,
            ws_popup¦ws_visible¦
            mciwndf_noplaybar¦
            mciwndf_nomenu,                
            (char *)file);
        rect rect;
        int sx,sy;
        ::getwindowrect(m_hmciwnd,&rect);
        sx=(::getsystemmetrics(sm_cxscreen)
            -rect.right+rect.left)/2;
        sy=(::getsystemmetrics(sm_cyscreen)
            -rect.bottom+rect.top)/2;    
        //窗口居中
        ::setwindowpos(m_hmciwnd,hwnd_topmost,sx,
            sy,0,0,swp_showwindow¦swp_nosize);
        
        g_nlength=mciwndgetlength(m_hmciwnd);
        mciwndplay(m_hmciwnd);
        settimer(m_hmciwnd,1,50,timerproc);
        
    }catch(...)
    {
        atltrace("error:%ul",::getlasterror()); 
    }
    return s_ok;
}
  
          6.flash.cpp中实现timerproc,用于关闭视频窗口。
long g_nlength;
void callback timerproc(
            hwnd hw

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 一个比较经典的同步问题,请大家帮忙!!
  • stringtable问题!一个很常见经典的问题--
  • 大问题,精通Com的进来,关于控件容器方面!

相关文章

  • 2017-06-04 谁能谈谈com当前的应用领域和发展趋势!来者有分
  • 2017-06-04 能否用vc写个工具按钮添加在excel实现某些功能?
  • 2017-06-04 _bstr_b范围问题
  • 2017-06-04 百分求:vc调用Office2003的方法
  • 2017-06-04 关于VC7的WebBrowser控件
  • 2017-06-05 大家春节快乐。。。。进入讨论。。。清发表您的高见
  • 2017-06-04 如何学习windows编程,以及介绍一下书籍
  • 2017-06-04 用VC对word文件进行操作
  • 2017-06-05 跨线程传递mfc对象得问题,请大家帮帮忙,谢谢!!!!!!!!!!!!!!!
  • 2017-06-04 怎么把一个支持VBA编程调用的系统集成到一个用VC编写的系统中去

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 一个调用IXMLHttpRequest的问题,我如何让我的程序只要调用MSXMLDLL中的就好,不调用MSXML2DLL中的
    • ####好难的问题,高手进####
    • 请高手指教,怎么才能快速COM入门?
    • 程序调试的问题
    • 怎样写注册表来注册COM组件???
    • 请问WIN2003是否支持IEHELPER。
    • COlEDispatchDriver与COleDataObject怎么联系起来
    • 如何知道當前DLL函數的前一調用者的文件名?
    • 创建COM实例失败!大家帮忙看看!
    • Activex中加入了工具栏,如何使用Update_Command_UI那种的功能来更新工具栏按钮状态

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有