2010-09-15 11 views
0

Je programmation VIX API de Python 2.5, mais maintenant je veux porter le code à Python 3.2Cordes en Python 3

Cette fonction ouvre la machine virtuelle:

self.jobHandle = self.VixLib.vix.VixVM_Open(self.hostHandle, 
              "C:\\MyVirtualMachine.vmx", None, None) 

Previusly cette fonction est importée de Vix.dll avec ce code:

vix.VixVM_Open.restype = VixHandle 
vix.VixVM_Open.argtypes = [VixHandle,c_char_p,POINTER(VixEventProc),c_void_p] 

dans ce 2.5 code est correct, mais en 3.2, il retourne ctypes.ArgumentError

Que puis-je faire?

+0

Je suppose que cela est lié au fait que toutes les chaînes sont devenues unicode en version 3.0, mais je ne sais pas quelle est la solution. – recursive

+1

Y compris la trace de la pile entière pourrait être utile. – Daenyth

+0

qu'est-ce que la trace entière de la pile ??? désolé mais je suis begginer en python – igferne

Répondre

5

Votre deuxième argument doit être codé dans un format que l'API VIX comprendra, puisque Python 3.x crée maintenant toutes les chaînes en Unicode. L'approche la plus simple serait de modifier votre deuxième argument à lire:

"C:\\MyVirtualMachine.vmx".encode('ascii','ignore') 

qui devrait vous donner une variable d'octets de type, qui devrait être plus acceptable pour VIX.

+0

En faisant cela, le problème était résolu !! Merci beaucoup!! Où puis-je vous voter ??? – igferne