WINX支持DirectX,OpenCV吗?

news/2024/7/6 5:07:39

偶尔也会听到这样的一些疑问:WINX支持DirectX,OpenCV吗?也会听到SmartWin支持OpenCV这样的说法。下面我们分析一下这个问题。

我们知道,库之间共存的障碍,主要有以下几点:

其一:编译期的符号(指类名、函数名、宏名等)冲突。主要表形在:

  • 宏名冲突(由于没有命名空间的保护)。
  • 基本类型的typedef。有不少库喜欢自己typedef一下所有的基本类型。如uint32, int32等。由于这些类型非常常见,并且typedef发生在全局命名空间,冲突的概率就很大。

其二:链接期的符号冲突。根据我的经验,这主要表现在:

  • 库之间的符号冲突,即两个库同时提供了某个函数。最为典型的是全局new/delete算符的重载C++允许重载全局new/delete算符,这真的是一场灾难。在两个库同时重载了new/delete时,就出现了符号冲突(可能也会在编译期体现,但常见的情况在链接期才表现出来)。
  • 使用了不同模式的C库。如果两个静态库(Static Library)使用了不同模式的C库,那么他们将出现大量的符号冲突。而我们知道,Visual C++提供了6种模式的C库:
      Single-Threaded
      Debug Single-Threaded
      Multithreaded
      Debug Multithreaded
      Multithreaded DLL
      Debug Multithreaded DLL
  • 不同编译器编译的静态库(Static Library)不能共存。原因主要亦在于使用了不同的C库。

其三:框架的假设。一些库是以框架方式提供的,要求用户按照其预定的方式进行调用。如果两个库均提供了框架,那么他们互不知晓的情况下,通常很难在一起工作。

其四:调用的假设。在你调用一个库的代码时,你需要模拟出它需要的环境。可分为两种情形:

  • 显式的依赖。例如,你要调用QT的函数,很多时候,你需要in/out一个QString参数。当然,既然你用了QT,生成一个QString还是很容易。但是如果某个函数要求传入QWidget*指针呢?除非你的窗体(Widget)本来就是QT实现的,不然这个QWidget*的生成还是颇费脑筋。
  • 隐式的依赖。例如,你要调用MFC的一段代码,而该代码使用了AfxGetApp或者其他。那么显然你的程序需要有AfxGetApp。你的本意可能只是需要一个MFC组件,最后你却发现,最终你不得不依赖一个MFC框架(Framework)。又如ATL/WTL的_Module,ATL/WTL本身架构精巧,但是_Module很要命。个人认为它破坏了ATL/WTL本身的纯洁。因为它其实与AfxGetApp并无二致,最终导致了强耦合的结构。

WINX如何解决这些问题?

其一:编译期的符号冲突。WINX使用namepsace尽量减少对全局命名空间的污染。对宏名亦采用类namespace的解决方案,多数WINX的宏名均以“WINX_”开头。

其二:链接期的符号冲突。和STL一样,WINX的代码尽量以纯头文件的方式提供。

其三:框架的假设。WINX不是框架,以便有更好的适应性。

其四:调用的假设。WINX的函数规格尽量减少采用WINX特有的数据结构。另外,类似MFC的AfxGetApp(),WTL的_Module的全局性数据,这在WINX中是明令禁止的(只是由于WINX使用部分WTL的代码,一些时候,_Module的使用不能避免)。

所有这一切,均是为了让WINX在最大程度上和更多的库可以协作。而我们在前面也已经提到了,WINX尽量采用了更为开放的结构。相比之下,它更懂得与其他库一起协作的道理。 





http://www.niftyadmin.cn/n/3654698.html

相关文章

股票技术指标详解--顺势指标(CCI)

来源:http://wma.cmbchina.com/education/stock/index/cci.htm 顺势指标(CCI) 一、顺势指标 该指标用来测量股价脱离正常价格范围之变异性,正常波动范围在100之间。属于超买超卖类指标中较特殊的一种,是专门对付极端行情的。在一般常态行情…

WINX中使用OpenCV的一个样例

上一篇我们谈到WINX与其他库共存的问题。空口无凭,我们这里就给出一个WINX中使用OpenCV的样例。数字图像的直方图均衡化是常用的图像增强方法。这个样例本身的源代码取之:数字图像的直方图均衡化(C/C源代码)。作者HUNNISH&#xf…

Kryo 高性能序列化和反序列化

一、pom.xml <dependency><groupId>com.esotericsoftware</groupId><artifactId>kryo</artifactId><version>4.0.0</version> </dependency>二、封装工具类 package com.cxs.web.system.kryo;import com.cxs.common.util.Ar…

股票技术指标详解--人气指标(AR)

人气指标(AR) 一、人气指标 股市中买卖双方的气势主要反映在每日股指最高点、最低点及开盘价三者之间的关系上。AR指标是利用一定周期内三者的差异以及比值反映出股市强弱、买卖气势的指标。 二、公式 AR(n)∑&#xff08;当日最高价&#xff0d;当日开盘价&#xff09;∑&…

WINX-1.1.01 Released

修订记录 1.1.01 (2006-10-14)-----------------------------------------*) 示范代码&#xff08;tutorials&#xff09;- Hello, SmartWin! tutorials/winx/step001/hello,smartwin (a)- XSL转换(XSLT) tutorials/winx/step018-xslt (b)- 直方图均衡化(OpenCV样例) tutorials…

如何让 HTML识别 String 里的 ‘\r\n‘ 并成功换行显示

在结果所在的 div 的 css 设置&#xff1a; white-space: pre-line;如&#xff1a; <span style"white-space: pre-line;">文本内容 </span>然后页面就能成功识别 ‘\r\n’ 或 ‘\n’ &#xff0c;并换行显示.

OWC学习笔记-图表选中状态

在使用ChartSpace时没有找到选中图形组件的方法或属性&#xff0c;后来找到一种用XMLData参数可以设置选中&#xff0c;不过选中状态不好看&#xff0c;不知道有什么可以改进的。 实现代码&#xff1a; <object idChartSpace1 classidCLSID:0002E55D-0000-0000-C000-00000…

在console中 使用C Runtime 和 STL 显示 Unicode中文

这篇文章应该是[netsin]的成果&#xff0c;我勤快&#xff0c;记下来。注&#xff1a;wprintf是C的标准库函数&#xff0c;但wcout不是C的标准成员&#xff0c;C中的L”……”是宽字符&#xff0c;却未必是unicode字符&#xff0c;这与编译器实现相关。本文中的代码执行环境是 …