在 aardio 中嵌入 .Net 开源组件

经过不断的改进,现在的 aardio 嵌入 .Net 组件很多时候比 .Net 自身可能要方便,不但调用 .Net 的代码很简洁,也可以兼容主流 .Net 不同版本的运行时(支持所有主流桌面操作系统,不需要额外再去安装 .Net ),并且可以内存嵌入 .Net 编程语言生成的 DLL程序集,并生成独立EXE文件。

aardio 自带的 .Net 范例中提供了非常多的范例,今天我们要说的是调用另外的一个 .Net 开源组件:用于获取硬件温度的 Open Hardware Monitor。很多年前有人问过我怎么调用这个组件,我当时写了一段代码,今天有空,将这段代码封装为了一个扩展库( 源码其实没几句)

先看看在 aardio 中调用这个扩展库的代码:

import win.ui;/*DSG{{*/var mainForm = win.form(text='aardio 利用开源库OpenHardwareMonitor获取CPU或显卡温度';right=791;bottom=699)mainForm.add(edit={cls='edit';left=8;top=4;right=787;bottom=696;db=1;dl=1;dr=1;dt=1;edge=1;hscroll=1;multiline=1;vscroll=1;z=1})/*}}*/
import sys.openHardwareMonitor; var computer = sys.openHardwareMonitor.computer();
computer.enumHardware(function(hardwareItem,path,index){ hardwareItem.Update() mainForm.edit.print( path + hardwareItem.Name,hardwareItem.HardwareTypeString ); for i,sensor in hardwareItem.eachSensors(){ mainForm.edit.print(path+'\t',sensor.Name,sensor.ValueString,sensor.MaxString,sensor.SensorTypeString ) } return path + '\t'; },'')
mainForm.show() win.loopMessage();

这个 sys.openHardwareMonitor 扩展库的关键代码其实就几句:

import dotNet; var appDomain = dotNet.appDomain();  var OpenHardwareMonitorLib = appDomain.loadFile($'~\lib\sys\openHardwareMonitor\.res\OpenHardwareMonitorLib.dll');  namespace sys.openHardwareMonitor{    HardwareComputer = OpenHardwareMonitorLib.import('OpenHardwareMonitor.Hardware.Computer')      computer = function(){    var c = HardwareComputer();    c.MainboardEnabled = true;         //省略其他代码  }}

非常简单,这里要注意一下上面DLL程序集文件路径前面有一个 $ 符号:

$'~\lib\sys\openHardwareMonitor\.res\OpenHardwareMonitorLib.dll'

$ 这个符号的作用是指示 aardio 将这个 DLL 编译到代码中 —— 在运行时直接通过内存加载这个 DLL,也就是说发布程序以后就不再需要这个 DLL 文件了,很多 .Net 程序集体积非常小,嵌入这些程序集很不错。

(0)

相关推荐