Creare un COM in Python. (ispirato da Python programming on Win 32 di Mark Hammond)
Quante volte in visual basic o in ASP si sente la mancanza di un migliore supporto delle stringhe come lo slicing o lo splitting?
Con PythonWin è possibile creare in poche righe di codice un COM capace di sopperire questa "lacuna".
Aprite python win e create un nuovo pyton script.
Inserite il codice seguente rispettando le indentature (fondamentali per il python).
class PythonUtilities:
_public_methods_ =[ 'Splitta' ]
_reg_progid_= "test.com"
_reg_clsid_= "{386CC2B0-2235-11D5-A647-0020183C194B}"
def Splitta(self, val, item=None):
import
string
if
item !=None:
item=str(item)
return
string.split(str(val),item)
if __name__=='__main__':
print "registro il com..."
import win32com.server.register
win32com.server.register.UseCommandLine(PythonUtilities)
Alla riga 4 potrete notare la chiave di registro _reg_clsid_ il
valore inserito deve essere generato "al volo" sulla macchina che
registra il COM. Per avere un valore valido andate alla finestra interattiva
di python e digitate:
import pythoncom
print pythoncom.CreateGuid()
L'interprete vi risponderà con qualcosa del genere
{23EEC7A2-3195-11D5-A66B-0020183C194B}
Copiatelo e incollatelo al posto del valore fornito con questo script.
Lo script è progettato per autoregistrarsi alla prima esecuzione, quindi
lanciandolo otterrete un messaggio del tipo
registro il com...
successful registered test.com
A questo punto chiudete pythonwin e aprite visual basic (ma il discorso si
applica pari pari anche per le asp).
Incollate il seguente codice.
Private Sub Form_Load()
Set
pippo = CreateObject("fede.com")
stringa
= "il python è una bomba"
ciccio
= pippo.splitta(stringa)
For Each Item In ciccio
MsgBox
Item
Next
End Sub
Se la registrazione del com è andata a buon fine, all'avvio del programma
dovreste vedere una successione di msgbox, una per ogni parola della variabile
stringa.
Il funzionamento di questo semplice COM può essere esteso senza quasi
modifiche a qualsiasi problema dove il VB è carente.
Per liberare risorse (se non ne avete bisogno) potete poi rilanciare lo script aggiungendo --unregister come parametro di lancio.