<br><br><div class="gmail_quote">Il giorno 12 gennaio 2010 04.32, Daniele Varrazzo <span dir="ltr"><<a href="mailto:piro@develer.com">piro@develer.com</a>></span> ha scritto:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Oddio... un pelino masochistico! Non è meglio lasciar fare il refcount a<br>
qualcosa tipo pyrex? </blockquote><div>ma LOL. Beh il mio intento è anche quello di studiarmi le API e credo che usandole direttamente nel C sia il modo migliore, anche perchè ho in mente un paio di moduli in cui dovrei usare delle librerie in C, diciamo che le scuse per questa scelta non mancano :p certo che poi la soluzione da te proposta è migliore quando è, ad esempio, per lavoro, ma non è questo il mio caso -non ancora-. <br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">La documentazione di PyModule_AddObject sembra suggerire che devi<br>
passargli il risultato della funzione Py_InitModule [1] o analoghe. Questo<br>
va fatto nella funzione di inizializzazione del modulo (initpymod nel tuo<br>
caso).<br></blockquote><div>Ah ecco, io pensavo dovessi proprio usare PyModule_New, ho invece fatto come dici tu, salvando il riferimento della Py_InitModule() e provando con quello e funziona tutto alla perfezione :) <br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Io comunque non ho mai usato PyModule_AddObject: per un esempio puoi<br>
vedere questo semplice (2 funzioni e una costante stringa) modulo di<br>
estensione [2]: il codice della initXXX() usa:<br>
<br>
- Py_InitModule4 per creare il modulo<br>
- PyModule_GetDict per ottenere il dizionario del modulo<br>
- PyDict_SetItemString per aggiungere oggetti al dizionario del modulo.<br></blockquote><div>Uhm, è bene tenerlo a mente :) nel mio caso comunque và benissimo PyModule_AddObject, in quanto devo solo rendere disponibile come variabile un dizionario con dei valori predefiniti per un utilizzo rapido del modulo. <br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Lo scheletro di questo modulo l'ho creato usando un tool mezzo abbandonato<br>
che si trova nella distribuzione sorgente di Python: Tools/modulator. Ha un<br>
po' di bit rot ma ce l'ha fatta a produrre uno scheletro che poi ho finito<br>
a mano.<br></blockquote><div>Darò una occhiata anche a questo, ma se già dici che è mezzo abbandonato... le alternative non mancano e poi, sinceramente, il modulo in questione l'ho scritto da zero e ho ottenuto subito qualcosa di funzionante per alcuni test. <br>
</div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>
Comunque appena serve qualcosa un pelino più complessa ti sconsiglio di<br>
procedere a mano con l'API C nuda e cruda e ti consiglio invece<br>
Pyrex/Cython.<br>
<br>
[1] <a href="http://docs.python.org/c-api/allocation.html#Py_InitModule" target="_blank">http://docs.python.org/c-api/allocation.html#Py_InitModule</a><br>
[2]<br>
<a href="http://code.google.com/p/py-setproctitle/source/browse/src/setproctitle.c" target="_blank">http://code.google.com/p/py-setproctitle/source/browse/src/setproctitle.c</a><font color="#888888"><a href="http://lists.python.it/mailman/listinfo/python" target="_blank"></a><br>
</font></blockquote></div>Già, credo proprio che darò un occhio a Pyrex, l'avevo già fatto ma mai seriamente e soprattutto senza mai usarlo.<br><br>Grazie ancora per il tuo aiuto, sei stato molto prezioso :)<br>-- <br>
Alessandro A.<br>