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 進行學習交流