Ciao A tutti,
e' da più di un giorno che cerco di risolvere questo problema, qualsiasi aiuto sarebbe apprezzatissimo.
Vi spiego la situazione.
ho due script test e test1 che trovate a fondo mail,
lo script test definisce un serverCom.
se lo eseguo da python, non ci sono errori e lo script fa esattamente quello che gli viene richiesto di fare. se invece chiamo il mio script da del codice c# ,(che trovate sempre in fondo alla mail), l'esecuzionde del codice mi ritorna un errore. dopo attente analisi mi sono accorto che se uso il codice c# compilando con l'opzione anyCpu, (la mia macchina e' a 64 bit), il codice si schianta quando vado ad utilizzare il metodo :
 def comInit(self,obj=None):  # <---- qui gli passo una stringa "pippo"
        self._test1=test1.test1(obj)
e precisamente quando tenta di istanziare la classe test1

l'errore non si verifica se compilo il codice c# utilizzando l'opzione 32Bit.(Questa soluzione non la posso utilizzare, in quanto la mia classe com verra istanziata da un applicazione che non ho sviluppato io)

la cosa strana e che il metodo Now, non si schianta mai ..

Sapete come risolvere questo problema, o almeno darmi qualche consiglio?

Grazie mille ..
Matteo

#test
from win32com.server.util import unwrap, wrap
import test1

class test(object):
    """
        The main client application
    """
    _reg_clsid_ =   "{F92FB064-0B23-4AE7-BE1A-79DD8B820100}"
    _reg_desc_ =    "test module"
    _reg_progid_ =  "test.application"
    _public_methods_ = ['comInit','Now','GetIstance']
    def __init__(self):
        self._test1=None
    def comInit(self,obj=None):
        self._test1=test1.test1(obj)

    def Now(self,msg):
        return"Now" +str(msg)
    def GetIstance(self):
        return str(self._test1.getArg())

#o:=newObj('test.application')
#o->Now("ciao")
#o->comInit("aa")

if __name__=='__main__':
    import win32com.server.register
    win32com.server.register.UseCommandLine(test)
    t=test()
    t.Now("now  ")
    t.comInit("aa")
    print t.GetIstance()
    print "Test Done"

#Test1
class test1:
    def __init__(self,arg=None):
        self._arg=arg
    def getArg(self):
        return "done "+str(self._arg)


//c# code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            object obj = Activator.CreateInstance
                (Type.GetTypeFromProgID("test.Application"));
            object[] objArgs = new object[1];
            objArgs[0] = "ciao";
            obj.GetType().InvokeMember("comInit",
                BindingFlags.InvokeMethod, null, obj, objArgs);

            object ret=obj.GetType().InvokeMember("Now",
                BindingFlags.InvokeMethod, null, obj, objArgs);

        }
    }
}
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a