Monthly Archives: April 2020

HPE中国往事

2015年5月,紫光与惠普合作——紫光集团收购中国惠普公司旗下”新华三”51%的股份。7月,中国惠普又专门成立了全资子公司——紫光华山。

亦即,新华三=紫光华山+杭州华三通信。

旋即,瞩目良久的惠普公司分拆事件落地——11月,惠普(HPI)和惠普企业(HPE)各立门户。中国惠普与全球一致,顺利完成了分拆。原来的中国惠普企业级集团,也就是成为我们现在经常提及的中国HPE,专注企业级业务。

分拆对重组工作并没有影响,只是在表述上有了一些变化——新华三的业务范畴,涵盖紫光华山负责的HPE服务器、存储业务,以及杭州华三负责的H3C网络设备业务。

Copy From:http://www.cnbp.net/magazine/article/11192

参考:新华三的前世今生

自己的一点总结和疑问:

HPE多品牌运营,借助紫光和华三两个具有本地品牌标识的优势,使得HPE的服务器,存储和网络产品多了几个渠道和方式进行销售,或者贴牌,或者独家代理。

H3C网络产品实际上是3Com的产品加上本地公司研发的新产品。

原H3C品牌实际所有人是HP,通过公司股份出让,品牌的实际控制人也换成了紫光一方。

H3C贴牌的服务器和存储等设备的产品供应链和收益模式?HPE品牌产品是否支付代理费和品牌使用费? HPE产品的售后似乎还是由HPE自己来提供,后期是否会转交H3C?

为什么用电磁波的一个特性RF代表整个领域

Although RF is a rate of oscillation, the name RF or “radio frequency” are used as a substitute for radio to define the use of wireless communication, as different to communicate through electric wires.

From: https://www.edgefxkits.com/blog/rf-wireless-radio-frequency-working-application/ 

“RF” refers to the use of electromagnetic radiation for transferring information between two circuits that have no direct electrical connection.

From:https://www.allaboutcircuits.com/textbook/radio-frequency-analysis-design/rf-principles-components/what-is-rf-and-why-do-we-use-it/

API是通过头文件和导入库标记函数入口地址的

.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。

附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件。如果要完成源代码的编译和链接,有头文件和lib就够了。如果也使动态连接的程序运行起来,有dll就够了。在开发和调试阶段,当然最好都有。

.h .lib .dll三者的关系是:

H文件作用是:声明函数接口

DLL文件作用是: 函数可执行代码

当我们在自己的程序中引用了一个H文件里的函数,编链器怎么知道该调用哪个DLL文件呢?这就是LIB文件的作用: 告诉链接器 调用的函数在哪个DLL中,函数执行代码在DLL中的什么位置,这也就是为什么需要附加依赖项 .LIB文件,它起到桥梁的作用。如果生成静态库文件,则没有DLL ,只有lib,这时函数可执行代码部分也在lib文件中

目前以lib后缀的库有两种,一种为静态链接库(Static Libary,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)。静态库是一个或者多个obj文件的打包,所以有人干脆把从obj文件生成lib的过程称为Archive,即合并到一起。比如你链接一个静态库,如果其中有错,它会准确的找到是哪个obj有错,即静态lib只是壳子。动态库一般会有对应的导入库,方便程序静态载入动态链接库,否则你可能就需要自己LoadLibary调入DLL文件,然后再手工GetProcAddress获得对应函数了。有了导入库,你只需要链接导入库后按照头文件函数接口的声明调用函数就可以了。导入库和静态库的区别很大,他们实质是不一样的东西。静态库本身就包含了实际执行代码、符号表等等,而对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息。

一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。在动态库的情况下,有两个文件,而一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。从上面的说明可以看出,DLL和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。
————————————————
版权声明:本文为CSDN博主「鱼思故渊」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yusiguyuan/java/article/details/12649737

Android Interface Definition Language (AIDL)

The Android Interface Definition Language (AIDL) is similar to other IDLs you might have worked with. It allows you to define the programming interface that both the client and service agree upon in order to communicate with each other using interprocess communication (IPC). On Android, one process cannot normally access the memory of another process. So to talk, they need to decompose their objects into primitives that the operating system can understand, and marshall the objects across that boundary for you. The code to do that marshalling is tedious to write, so Android handles it for you with AIDL.

Note: Using AIDL is necessary only if you allow clients from different applications to access your service for IPC and want to handle multithreading in your service. If you do not need to perform concurrent IPC across different applications, you should create your interface by implementing a Binder or, if you want to perform IPC, but do not need to handle multithreading, implement your interface using a Messenger. Regardless, be sure that you understand Bound Services before implementing an AIDL.