ApolloStudio高手之路(8):用Python调用.Net(C#、VB.Net等)开发的动态链接库(DLL库文件)实现相互协作

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最新版下载地址(网盘有交流群号):

(点击跳转至首页文章,见文章最底部下载链接)

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页