最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python調(diào)用.NET庫(kù)的方法步驟

 更新時(shí)間:2019年12月27日 11:21:41   作者:天元浪子  
這篇文章主要介紹了Python調(diào)用.NET庫(kù)的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

開(kāi)發(fā)背景是這樣的:整個(gè)項(xiàng)目中使用很多臺(tái)摩托羅拉的RFID讀卡器,我要為這些讀卡器寫一個(gè)管理程序,判斷是否有RFID標(biāo)簽進(jìn)入或離開(kāi)某個(gè)區(qū)域。用戶提供給我的,除了設(shè)備,就是一個(gè).net的動(dòng)態(tài)庫(kù)文件。

經(jīng)朋友指點(diǎn),安裝了.NET Framework 4.0和IronPython 2.7之后,終于可以調(diào)用.net庫(kù)了。我不確定的是,python環(huán)境下那些打包工具是否還是使用,因?yàn)槟_本要在IronPython的解釋器ipy.exe中運(yùn)行——這是后話,需要在以后的應(yīng)用中去實(shí)踐。先說(shuō)說(shuō)實(shí)際應(yīng)用中的稀奇古怪的問(wèn)題吧。

我的核心任務(wù)有兩個(gè):讀RFID標(biāo)簽、讀寫GPIO端口。前者相對(duì)簡(jiǎn)單,操作過(guò)程也非常順利。后者就屢屢碰壁,到現(xiàn)在也沒(méi)有徹底解決。

C#讀GPIO端口的代碼是這樣的:

IOPinStatus[] inputPinsStatus = null;
IOPinStatus[] outputPinsStatus = null;
Reader.GetIOStatus(out inputPinsStatus,out outputPinsStatus);

inputPinsStatus[i].pinStatus就是輸入端口的狀態(tài),這是一個(gè)布爾型的變量。

IronPython需要先構(gòu)造兩個(gè)變量inputPinsStatus和outputPinsStatus,然后再調(diào)用GetIOStatus方法:

inputPinsStatus = clr.Reference[Array[bool]](())
outputPinsStatus = clr.Reference[Array[bool]](())
Reader.GetIOStatus(inputPinsStatus, outputPinsStatus)

inputPinsStatus是不能遍歷的,必須使用inputPinsStatus.Value才可以。

C#寫GPIO端口的代碼是這樣的(端口0寫True):

IOPinStatus[] selectedOutPins = null;
selectedOutPins = new IOPinStatus[6];
selectedOutPins[0].pin = IOPins.PIN_0;
selectedOutPins[0].pinStatus = True;
Reader.SetOutputStatus(selectedOutPins);

IronPython代碼是這樣的:

outForSet = Array.CreateInstance(IOPinStatus, 6)
IOPinStatus.pin.SetValue(outForSet[0], IOPins.PIN_0)
IOPinStatus.pinStatus.SetValue(outForSet[0], True)
Reader.SetOutputStatus(outForSet)

這時(shí),蹊蹺事兒出現(xiàn)了:代碼可以順利執(zhí)行,沒(méi)有提示語(yǔ)法錯(cuò)誤,設(shè)備也沒(méi)有相應(yīng)的動(dòng)作!檢查SetValue的結(jié)果,的確沒(méi)有生效。本來(lái)這一句最初是這樣寫的:

outForSet[0].pinStatus = True

但系統(tǒng)提示:RuntimeWarning: Setting field Field on value type IOPinStatus may result in updating a copy. Use IOPinStatus.pinStatus.SetValue(instance, value) if this is safe. For more information help(IOPinStatus.pinStatus.SetValue).

改用SetValue之后,卻好比對(duì)牛彈琴,什么反應(yīng)也沒(méi)有了。強(qiáng)烈郁悶中。。。

冥思苦想了一天之后,我發(fā)現(xiàn)了IOPinStatus的原型函數(shù):

print IOPinStatus.__doc__
IOPinStatus(pin: IOPins, pinStatus: bool)

既然無(wú)法直接給變量的pin和pinStatus賦值,那么重新構(gòu)造一個(gè)變量是否可行呢?

outForSet = Array.CreateInstance(IOPinStatus, 6)
outForSet[0] = IOPinStatus(IOPins.PIN_0, True)
... ...
Reader.SetOutputStatus(outForSet)

終于成功了!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

娱乐| 徐水县| 新丰县| 界首市| 恩施市| 南乐县| 平潭县| 四平市| 环江| 甘德县| 雷山县| 云浮市| 南召县| 平潭县| 黄大仙区| 兴义市| 浏阳市| 二连浩特市| 凤台县| 佛学| 彭阳县| 郴州市| 张家口市| 乃东县| 南安市| 特克斯县| 江陵县| 玉屏| 金门县| 望谟县| 和平区| 溧水县| 乡城县| 城步| 大冶市| 镇巴县| 崇仁县| 凌源市| 靖安县| 淮滨县| 茶陵县|