使用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库的依赖。
阅读全文
0 0
- 使用VS2017开发ActiveX控件来显示视频
- VS2017开发activex
- [activeX]使用ATL开发ActiveX控件[转]
- VC6开发视频监控ActiveX控件总结
- VC6开发视频监控ActiveX控件总结
- 使用MFC开发ActiveX控件
- 使用MFC开发ActiveX控件
- 使用MFC开发ActiveX控件
- 使用MFC开发ActiveX控件
- 使用MFC开发ActiveX控件
- 使用MFC开发ActiveX控件
- 使用MFC开发ActiveX控件
- 使用C#开发ActiveX控件
- 使用C#开发ActiveX控件
- 使用MFC开发ActiveX控件
- 使用C#开发ActiveX控件
- 使用C#开发ActiveX控件
- 使用MFC开发ActiveX控件
- 算法模板——树链剖分
- 进程间通信——管道
- 二进制转十六进制 算法实现思想
- 20171031 web开发中的session
- 计算几何
- 使用VS2017开发ActiveX控件来显示视频
- Oc 数据持久化Plist、SQLite、CoreData、FMDB四种-demo
- 最小生成树-普里姆算法-java实现
- WebService学习(三)——使用JDK开发WebService
- Oc 下拉放大表格stretchTableHeader
- 计算圆的面积和周长
- 做题的方式简单点
- Android面试常客--四大组件之Activity
- 转载(阮一锋)Flex 布局教程:语法篇