自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Pyhon腳本解釋器在Windows應(yīng)用中的實(shí)際操作方法

開(kāi)發(fā) 后端
如果你想了解在Windows應(yīng)用中如何嵌入Python腳本解釋器的相關(guān)實(shí)際操作方案時(shí),下面的文章你就可以點(diǎn)擊觀看了,希望你會(huì)從中學(xué)會(huì)很多的東西。

你對(duì)Python腳本解釋器的實(shí)際相關(guān)應(yīng)用感興趣嗎?而今天我們的文章主要向你介紹的是在Windows應(yīng)用中如何嵌入Python腳本解釋器,以及實(shí)際操作的六種方案的具體介紹。以下是文章內(nèi)容的具體介紹。

下面文件名中出現(xiàn)的'##'是被縮寫(xiě)的版本號(hào).舉例來(lái)說(shuō),Python 2.1.1,##將會(huì)被21替換. 在Windows應(yīng)用中嵌入Python腳本解釋器的方法可以匯總?cè)缦?

1.不要直接把Python建立在你的.exe文件中。在Windows中,Python應(yīng)該以DLL的形式引入,從而可以使用Python的 DLL's。 (第一個(gè)要點(diǎn))。應(yīng)該連接到Python##.dll;你可以靜態(tài)或動(dòng)態(tài)地連接到Python。靜態(tài)意味著要連接python15.lib。缺點(diǎn)是當(dāng)Python##.dll不存在的時(shí)候你的應(yīng)用程序?qū)⒉荒苓\(yùn)行. 。

 一般提示: Python##.lib是python##.dll對(duì)應(yīng)的所謂"引入庫(kù)",它僅僅為連接定義符號(hào)。 Borland提示:首先使用Coff2Omf.exe把Python##.lib轉(zhuǎn)換成OMF格式。#t#

連接簡(jiǎn)化了連接選項(xiàng),因?yàn)橐磺卸及l(fā)生在運(yùn)行時(shí)。你的代碼必須用Windows函數(shù)LoadLibraryEx() 載入Python##.dll。你的代碼也必須使用Windows函數(shù)GetProcAddress()獲得指針,從而可以用它來(lái)操作 Python##.dll中的存取例程和數(shù)據(jù)(Python's C API's)。宏能夠使那些指針透明地使用在任何調(diào)用Python's C API的C代碼中。

2. 如果你使用SWIG(簡(jiǎn)化封裝和接口生成器), 將能夠容易地生成Python"擴(kuò)充模塊",它使得Python可以使用應(yīng)用程序的數(shù)據(jù)和方法。 SWIG幾乎會(huì)為你處理所有蹩腳的細(xì)節(jié)。結(jié)果是C代碼連入你的 .exe 文件之內(nèi),你不必生成DLL文件,這樣簡(jiǎn)化了聯(lián)接。

3. SWIG將會(huì)產(chǎn)生一個(gè)初始化函數(shù)(C函數(shù)),它的名字和擴(kuò)展模塊的名字有關(guān)。 舉例來(lái)說(shuō),如果模塊的名是leo,init函數(shù)將會(huì)被稱(chēng)為initleo() 。如果你使用SWIG shadow類(lèi),init函數(shù)將會(huì)被稱(chēng)為initleoc(),這個(gè)初始化通常隱藏了shadow類(lèi)使用的 helper 類(lèi)。 你能在第2步連接C代碼進(jìn)入你的.exe文件的原因是這個(gè)初始化函數(shù)等于把模塊引入Python中(第二個(gè)要點(diǎn))。

 4. 簡(jiǎn)而言之,你能使用下面的代碼初始化Python腳本解釋器引人你的擴(kuò)充模塊。

  1. #include "python.h"   
  2. ...   
  3. Py_Initialize(); // Initialize Python.   
  4. initmyAppc(); // Initialize (import) the helper class.   
  5. PyRun_SimpleString("import myApp") ; // Import the shadow class.  

5. 如果你使用了除MSVC以外的編譯器,可能會(huì)有兩個(gè)問(wèn)題出現(xiàn),編譯器用來(lái)構(gòu)建Py_None 是和python##.dll中一個(gè)叫_Py_NoneStruct的復(fù)雜數(shù)據(jù)結(jié)構(gòu)相關(guān)的宏,同樣,這段代碼也不能在多編譯器環(huán)境工作,用下面的代碼代替:

  1. return Py_BuildValue("");  

它可能是用SWIG的%typemap命令自動(dòng)地改變的,雖然我還沒(méi)有做這方面的工作。(我完全是SWIG新手)。

6. 使用Python shell腳本在你的Windows app的內(nèi)部 搭建Python解釋器窗口不是好的想法,因?yàn)楫a(chǎn)生的窗 

  1. Python##.dll.  

問(wèn)題 1: 基于FILE*的所謂 "非常高層"的函數(shù)在多編譯器環(huán)境中將不能正常工作;每個(gè)編譯器對(duì)待FILE結(jié)構(gòu)會(huì)有所不同。從實(shí)現(xiàn)的角度看他們是非常低層次的函數(shù)。

問(wèn)題 2: 當(dāng)生成對(duì)void函數(shù)的封裝的時(shí)候 ,SWIG產(chǎn)生下面的代碼:

  1. Python##.dll.  

口將會(huì)獨(dú)立于你的app的窗口系統(tǒng)。然而,你(或 wxPythonWindow類(lèi))應(yīng)該創(chuàng)建一個(gè)"本地的"解釋器窗口。它容易連接到到Python腳本解釋器。你可以重定向 Python的輸入/輸出到任何支持讀寫(xiě)的對(duì)象,這樣你全部的需要就是包含read()和write()方法的對(duì)象了。

【編輯推薦】

  1. Python創(chuàng)建mysql的數(shù)據(jù)庫(kù)連接池實(shí)際操作方案簡(jiǎn)介
  2. Python 多線程的單cpu與cpu上的多線程的區(qū)別
  3. Python 變量類(lèi)型的代碼示例
  4. Python 程序流程控制條件代碼的示例
  5. python語(yǔ)法入門(mén)中導(dǎo)入import與from時(shí)的代碼示例
責(zé)任編輯:佚名 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2009-12-30 15:53:28

Silverlight

2010-04-13 18:03:33

Oracle服務(wù)

2010-09-30 10:41:29

2010-02-03 10:23:47

C++操作符重載

2010-03-05 13:48:24

Python for

2010-05-31 18:16:48

MySQL數(shù)據(jù)庫(kù)備份

2010-01-04 16:50:04

Silverlight

2010-01-07 10:46:27

VB.NET Sock

2010-07-27 13:16:50

DB2使用所有內(nèi)存

2010-04-19 16:28:04

Oracle導(dǎo)出

2010-09-07 13:04:20

DB2數(shù)據(jù)庫(kù)

2010-08-06 11:21:45

IBM DB2 數(shù)據(jù)復(fù)

2010-08-13 10:13:15

DB2數(shù)據(jù)復(fù)制

2010-03-16 10:00:37

Python函數(shù)

2010-03-17 13:14:00

Python Libr

2010-04-29 17:05:58

Oracle 腳本

2010-05-19 11:25:46

MySQL觸發(fā)器

2010-05-18 09:31:05

MySQL修改表

2010-08-09 13:43:37

DB2數(shù)據(jù)遷移

2010-03-25 17:28:41

Python配置
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)