使用VS2017开发ActiveX控件来显示视频

来源:互联网 发布:虚幻4和unity3d 编辑:程序博客网 时间:2024/06/17 08:14

ActiveX 开发

ActiveX是Microsoft对于一系列策略性面向对象程序技术和工具的称呼,其中主要的技术是组件对象模型(COM)。 —— [ 百度百科 ]


创建ActiveX工程

这里写图片描述

添加调用接口

这里写图片描述

* 这里注意字符串尽量使用BSTR类型 *

添加回调接口

这里写图片描述

* 注意添加事件的地方不在Events菜单里面,迁移到 Ctrl菜单里面 *

js调用sample

<!DOCTYPE HTML>  <HEAD>  <TITLE>Test ActiveX</TITLE>  </HEAD>  <body><OBJECT name="MFCActiveXDemo" ID="Test_MFCActiveXDemo" WIDTH=528 HEIGHT=545 classid="CLSID:5ab0294d-c437-4f20-b3ad-e9b1888ccf45">      <PARAM NAME="_Version" VALUE="65536">      <PARAM NAME="_ExtentX" VALUE="12806">      <PARAM NAME="_ExtentY" VALUE="1747">      <PARAM NAME="_StockProps" VALUE="0">  </OBJECT>  <script language="javascript">function doTest(){    MFCActiveXDemo.AboutBox();}<br/><input type="button" value="ActiveX About" id="Test" onclick="doTest();"></body></HTML>  

打包发布

注意事项

  • 1
    ActiveX的接口参数中如果有字符串,尽量不要使用char/char*等参数,使用BSTR(LPCTSTR),否则会调用不到,可以使用下面函数进行wide char与char之间的转换
void UnicodeToUtf8(const wchar_t* unicode, char* UTF8, int size){    int len = WideCharToMultiByte(CP_UTF8, 0, (wchar_t *)unicode, -1, NULL, 0, NULL, NULL);    memset(UTF8, 0, size);    len = min(len, size);    WideCharToMultiByte(CP_UTF8, 0, (wchar_t *)unicode, -1, UTF8, len, NULL, NULL);}void UTF8ToUnicode(const char* UTF8, wchar_t* UnicodeStr, int size){    DWORD dwUnicodeLen = MultiByteToWideChar(CP_UTF8, 0, UTF8, -1, NULL, 0);    memset(UnicodeStr, 0, size);    if (dwUnicodeLen < size / sizeof(wchar_t)) {        MultiByteToWideChar(CP_UTF8, 0, UTF8, -1, UnicodeStr, dwUnicodeLen);    } else {        MultiByteToWideChar(CP_UTF8, 0, UTF8, -1, UnicodeStr, size / sizeof(wchar_t));    }}
  • 2
    回调js的代码一定要在UI线程当中执行,可以用PostMessage的方式,将消息转发到主线程当中回调,否则回调会失败

  • 3
    使用StretchDIBits函数在hwnd上面画RGB图像时

    • 先要调用SetStretchBltMode,否则图像会有噪点
SetStretchBltMode(pdc->m_hDC, COLORONCOLOR);StretchDIBits(pdc, 0, 0, width, height,        0, 0, mVideoWidth, mVideoHeight,        mVideoBuffer, m_pBmpInfo, DIB_RGB_COLORS, MERGECOPY);
  • 注意windows的RGB排列是BGR BGR BGR的方式,如果图像是ffmpeg转换出来的话,需要使用AV_PIX_FMT_BGR24格式,否则RB会相反,图像颜色错误
  • 24位RGB要使用bmiHeader.biCompression = BI_RGB;格式,32位RGB使用bmiHeader.biCompression = BI_BITFIELDS; 同时使用
        DWORD *mask = (DWORD*)&m_pBmpInfo->bmiColors;        *mask++ = 0x00FF0000;        *mask++ = 0x0000FF00;        *mask = 0x000000FF;

来控制RGB的排列

  • 如果ocx编译提示无法注册输出,则使用管理员权限打开vs环境,因为要注册控件到系统,需要权限,同样在cmd通过regsvr32注册的时候,也要以管理员权限打开cmd

  • 如果最终打包成的ocx无法在系统当中注册,比如缺失一些库,可以用dependencywalker程序去看一下缺少什么库

  • MFC要静态依赖,可以减少安装环境对MFC库的依赖。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝上幼儿园中午要用尿不湿怎么办 嫁到北京农村怎么办居住证 2020年没脱贫的农民怎么办 2020年农民的土地怎么办 车停在停车场被划怎么办 专升本差两分怎么办 入职需要学士学位证怎么办 不喜欢写科研项目又没编制怎么办 易学堂密码忘了怎么办 易班手机号换了怎么办 易班登录不上怎么办 易到手机号换了怎么办 海外留学没有教育部认证怎么办 七过月宝宝便秘怎么办 6个月孩子便秘怎么办 6个月婴儿便秘怎么办 一个多月宝宝两天没拉大便怎么办 7个月宝宝便秘怎么办 9个月宝宝便秘怎么办 六个月宝宝严重便秘怎么办 公司调岗员工不同意怎么办 acca注册一直在审核怎么办 ieee ap二审被拒怎么办 文章投到假期刊怎么办 论文投了假网站怎么办 网上传了虚假的怎么办? 网上做兼职被骗了钱怎么办 通过支付宝扫码被骗了怎么办 支付宝扫二维码被骗怎么办 在is上被骗了怎么办 微信兼职被骗怎么办天涯论坛 公众号不给稿费怎么办 围绕服务改善民生提出怎么办 翰墨香林苑怎么办全产权 西城高铁联名卡怎么办 英语教学系统做题时超时了怎么办 sci被要求撤稿怎么办 论文投稿后初审通过想撤稿怎么办 河南大学读写译挂了怎么办 在职mba双证硕士怎么办户口 电脑开机了出现一些英文单词怎么办