ApolloStudio是基于.Net与Python双架构下的实现,这样的架构体系使得其具有传统定制软件无法比拟的超强拓展性,在本文中我们将介绍这两者是如何在ApolloStudio平台上实现优势互补的。由于在ApolloStudio中使用的更易学习的Python作为主导脚本语言,这里我们将介绍Python是如何调用.Net下开发的(这里使用的是C#开发)DLL动态链接库文件进行应用拓展(如果DLL库文件是使用C++开发的,则需通过.Net语言中转一次,确保接口是可供.Net调用的即可)。
在日常工作中我们可能会遇到这种情况,尽管在ApolloStudion中集成了大量的标准通讯协议,但是偶尔还是会遇到一些用户个人定制化的需求,比如私有的加密协议,定制的WebService甚至是第三方设备SDK开发驱动等等,当遇到这种情况时,就可能需要运用到DLL库文件调用了(这个DLL可以是自己开发也可以是厂家提供的),我们在本文中将针对这种情况下做一个简单的案例说明。
应用案例举例
我们现在需要用到一个独立算法,是使用C#开发的,提供了两个类:TestDll和TestDll1:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ClassLibrary
{
public class TestDll
{
//获取两数据相加之和
public static int Add(int x, int y)
{
return x + y;
}
}
public class TestDll1
{
private int aaa = 11;
public int AAA
{
get { return aaa; }
set { aaa = value; }
}
//获取aaa的平方
public int ShowAAA()
{
return aaa * aaa;
}
}
}
在上面的类中我们发现TestDll里面包含了一个静态方法,而TestDll1里面则包含的是一些属性和方法,我们先其编译生成名为ClassLibrary.dll文件,将其复制到ApolloStudio软件目录里面的DLLs文件夹下(该目录为系统自动扫描路径):
回到ApolloStudio主程序中,我们编写脚本:
#-*- coding: UTF-8 -*-
#加载内嵌模块
import clr,sys,time,datetime, threading
#加载自定义库文件,请将库文件事先放置于ApolloStudio根目录里面的DLLs文件夹内
#或者使用Python添加默认模块搜索路径方法处理自定义路径
clr.AddReferenceToFile("ClassLibrary.dll")
from ClassLibrary import *#加载命名空间内所有类
#调用DLL文件静态方法
a=12
b=6
c=TestDll.Add(a,b)
AS.Func_SysInfoAdd(str(c))#显示在系统日志内
#调用DLL文件类属性和方法
td=TestDll1()#实例化一个TestDll1类
td.AAA=100#修改变量属性
AS.Func_SysInfoAdd(str(td.ShowAAA()))#显示在系统日志内
加载脚本,直接运行,我们即可在系统日志界面观察到结果:
至此,一个简单的外部DLL调用案例运行OK。
***********************************************************************************************************************************************
ApolloStudio最新版下载地址(网盘有交流群号):