Springer-Verlag Berlin Heidelberg 2013 VCSEL 垂直腔面发射激光器 Vertical Cavity Surface Emitting Laser Vertical-cavity surface-emitting lasers (VCSELs) are firmly established in the laser diode market for about 15 years meanwhile. It took about 17 years before these devices were commercialized. Multimode fiber optical networks with data rates in the 1 Gbit/s range were the initial market. In 2004, VCSELs were first incorporated in optical computer mice. Today, these two application areas approximately equally share a production volume of almost 100 million units per year. In future, high volumes can be expected also, e.g., for diverse sensing and illumination purposes, the latter using high-power laser arrays.
2023-03-18 21:35:16 15.81MB VCSEL
1
纯手工打造Emit实现AOP private static void OverrideMethods(TypeBuilder tb, MethodInfo method) { if (!method.IsPublic|| !method.IsVirtual || IsObjectMethod(method)) return; Type[] paramTypes = GetParameterTypes(method); MethodAttributes attr = MethodAttributes.Public | MethodAttributes.Family | MethodAttributes.HideBySig | MethodAttributes.Virtual; MethodBuilder mb = tb.DefineMethod(method.Name, attr, method.ReturnType, paramTypes); LocalBuilder result = null; ILGenerator il = mb.GetILGenerator(); bool is_void = method.ReturnType != typeof(void); if (is_void == false) result = il.DeclareLocal(method.ReturnType); object[] attrs = method.GetCustomAttributes(typeof(AspectAttribute), false); if (attrs != null) { //初始化所有当前方法用到的参数object[] CreateLocalParameterArr(il, paramTypes); //初始化AspectContext Type ctxType = typeof(AspectContext); ConstructorInfo info = ctxType.GetConstructor(Type.EmptyTypes); var ctx = il.DeclareLocal(ctxType); il.Emit(OpCodes.Newobj, info); il.Emit(OpCodes.Stloc, ctx); //给AspectContext的参数值属性ParameterArgs赋值 var propMethod = ctxType.GetMethod("set_ParameterArgs"); il.Emit(OpCodes.Ldloc, ctx); il.Emit(OpCodes.Ldloc_0); il.Emit(OpCodes.Call, propMethod); int m = attrs.Length; LocalBuilder[] lbs = new LocalBuilder[m]; MethodInfo[] endInvokeMethods = new MethodInfo[m]; //初始化标记的横切对象,并调用横切对象的BeforeInvoke方法 for (int i = 0; i < m; i++) { var tmpType = attrs[i].GetType(); var aspect = il.DeclareLocal(tmpType); ConstructorInfo tmpInfo = tmpType.GetConstructor(Type.EmptyTypes); il.Emit(OpCodes.Newobj, tmpInfo); il.Emit(OpCodes.Stloc, aspect); var before_invoke_method = tmpType.GetMethod("BeforeInvoke"); endInvokeMethods[i] = tmpType.GetMethod("AfterInvoke"); il.Emit(OpCodes.Ldloc, aspect); il.Emit(OpCodes.Ldloc, ctx); il.Emit(OpCodes.Callvirt, before_invoke_method); il.Emit(OpCodes.Nop); lbs[i] = aspect; } //类对象,参数值依次入栈 for (int i = 0; i <= paramTypes.Length; i++) il.Emit(OpCodes.Ldarg, i); //调用基类的方法 il.Emit(OpCodes.Call, method); //如果有返回值,保存返回值到局部变量 if (is_void == false) il.Emit(OpCodes.Stloc, result); //调用横切对象的AfterInvoke方法 for (int i = 0; i < m; i++) { il.Emit(OpCodes.Ldloc, lbs[i]); il.Emit(OpCodes.Ldloc, ctx); il.Emit(OpCodes.Callvirt, endInvokeMethods[i]); il.Emit(OpCodes.Nop); } //如果有返回值,则把返回值压栈 if (is_void == false) il.Emit(OpCodes.Ldloc, result); //返回 il.Emit(OpCodes.Ret); } }
2023-02-21 00:41:39 33KB C# Emit AOP
1
千行代码实现代理式AOP+属性的自动装配
2023-02-21 00:21:54 137KB emit aop
1
$emit与emit与emit与 $on的用法 新建bus.js import Vue from ‘vue’ export const bus = new Vue() 引用bus.js import {bus} from './bus' bus.$on('test', function (msg) { console.log(msg) }) bus.$emit('test', 11) bus.$emit触发第一次emit触发第一次emit触发第一次 $on监听不到 因为$emit 先于 $on 执行了,VUE并没有储存监听事件,所以无法监听到数据。 我这里遇到的是在调用$emit的时
2022-10-18 10:32:17 42KB bu em emi
1
今天小编就为大家分享一篇PyQT5 emit 和 connect的用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
2022-08-20 23:33:52 43KB PyQT5 emit connect
1
杰理AC690X音响产品开发SDK,包括蓝牙,FM..AUX,读卡U盘播放器(多种音乐格式解码功能)
2022-07-16 14:12:33 12.71MB DACapp下载 AC690x-SDK 杰理SDK LBOXapp下载
C语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSGEMITC语言头文件 MSG
2022-06-12 19:05:51 3KB C语言头文件MSGEMIT
利用初等行变换对任意矩阵进行满秩分解,根据hemite标准型得到的结果是满秩分解的一种有效方法
1
赛事 用于AssemblyScript的EventEmitter 特征 没有依赖 同构 适用于Node.js /浏览器/ Wasmer 代码小 安装 ~ npm install as-events 用法 import { EventEmitter } from 'as-events' const emitter = new EventEmitter ( ) emitter . on ( 'event' , ( data ) => { //... } ) emitter . emit ( 'event' , 'Hello Event Emitter!' )
2022-01-26 14:51:44 28KB WebAssembly
1
hivewallet是用于Hive区块链的快速,安全且开源的钱包,可用于iOS和Android。 主要特点 从Hive区块链监控任何/多个账户的余额 创建,签名和广播转账交易(发送配置单元和hbd)(可选) 如果您想签名传输操作,请使用密钥的AES 256加密存储(发送steem和sbd) QR码阅读器,可轻松导入密钥并发送给他人 QR码生成器,可轻松建议您的钱包地址,以供其他人发送至 可以选择使用Touch ID / Face ID来获取密码 如果要使用AES 256加密存储,则强制创建一个包含破解时间提示的困难密码短语。 制作说明 下载并安装Appcelerator CLI(您需要使用
2021-11-25 22:21:31 38.12MB steem steemit appcelerator cryptocurrency
1