1. 程式人生 > >ApolloStudio高手之路(8):用Python呼叫.Net(C#、VB.Net等)開發的動態連結庫(DLL庫檔案)實現相互協作

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最新版下載地址:

連結:https://pan.baidu.com/s/1UAgivKlM4E9dNT06V9spUw 密碼:a316

歡迎加入Q群:793683827 進行學習交流