在 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)