Hi,

So here is my problem, I have to implement a com server, that would be used by DotNet application, which can not work with late binding (apparently they don't have CreateObject of VB). So i am following the approach suggested by http://starship.python.net/crew/theller/ctypes/sum_sample.html, and things worked for a while but I am getting weird results now. Weird: python stops working, just shows the prompt.

Python 2.3.5 (#62, Feb  8 2005, 16:23:02) [MSC v.1200 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import win32com.client
>>> w = win32com.client.Dispatch("ctypes.asd")
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "C:\Python23\Lib\site-packages\win32com\client\__init__.py", line 95, in
Dispatch
    dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,c
lsctx)
  File "C:\Python23\Lib\site-packages\win32com\client\dynamic.py", line 91, in _
GetGoodDispatchAndUserName
    return (_GetGoodDispatch(IDispatch, clsctx), userName)
  File "C:\Python23\Lib\site-packages\win32com\client\dynamic.py", line 79, in _
GetGoodDispatch
    IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.II
D_IDispatch)
pywintypes.com_error: (-2147221005, 'Invalid class string', None, None)
>>> w = win32com.client.Dispatch("ctypes.SumObject")
>>> w
>>> w
>>> 1+2
>>>

Python 2.3.5 (#62, Feb  8 2005, 16:23:02) [MSC v.1200 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import win32com.client
>>> w = win32com.client.Dispatch("PythonDemos.Utilities")
>>> w
<COMObject PythonDemos.Utilities>
>>> dir(w)
['_ApplyTypes_', '_FlagAsMethod', '_LazyAddAttr_', '_NewEnum', '_Release_', '__A
ttrToID__', '__LazyMap__', '__call__', '__cmp__', '__doc__', '__getattr__', '__g
etitem__', '__init__', '__int__', '__len__', '__module__', '__nonzero__', '__rep
r__', '__setattr__', '__setitem__', '__str__', '_builtMethods_', '_enum_', '_fin
d_dispatch_type_', '_get_good_object_', '_get_good_single_object_', '_lazydata_'
, '_make_method_', '_mapCachedItems_', '_oleobj_', '_olerepr_', '_print_details_
', '_proc_', '_unicode_to_string_', '_username_', '_wrap_dispatch_']
>>> w.SplitString("asd")
(u'asd',)
>>> w = win32com.client.Dispatch("ctypes.SumObject")
>>> w.get(2,3)
>>> w
>>> 1+2
>>>

Does it sound familiar? A bug in win32com.client.Dispatch or should I be looking at my com server code [which is almost what is presented in sum_sample page I linked above? GUID conflict? I am stuck, please help.

TIA,

--
Amit Upadhyay
Blog: http://www.rootshell.be/~upadhyay
+91-9820-859-701
  /* A TypeLibrary, compiled to sum.tlb */

        [
            uuid(90810cb9-d427-48b6-81ff-92d4a2098b45),
            version(1.0),
            helpstring("Sum 1.0 Type Library")
        ]
        library SumLib
        {
            importlib("stdole2.tlb");
            /* a dual interface, derived from IDispatch */
            [
                    object,
                    dual,
                    uuid(6edc65bf-0cb7-4b0d-9e43-11c655e51ae9),
                    helpstring("IDualSum Interface"),
                    pointer_default(unique)
            ]
            interface IDualSum: IDispatch {
                    [id(100)] HRESULT Add(double a, double b, [out, retval] 
double *result);
            };

            [
                    uuid(2e0504a1-1a23-443f-939d-869a6c731521),
                    helpstring("CSum Class")
            ]
            /* a coclass, implementing this interface */
            coclass CSum
            {
                    [default] interface IDualSum;
            }
        };

# -*- python -*-
# Generated from C:\Documents and Settings\Webroo\Desktop\p2p\test\sum.tlb

###############################################################
# NOTE: This is a GENERATED file. Please do not make changes, #
# they will be overwritten next time it is regenerated.       #
###############################################################

from ctypes import *
from ctypes.com import IUnknown, GUID, STDMETHOD, HRESULT
from ctypes.com.automation import IDispatch, BSTR, VARIANT, dispinterface, \
                                  DISPMETHOD, DISPPARAMS, EXCEPINFO


##############################################################################

# The Type Library
class SumLib:
    'Sum 1.0 Type Library'
    guid = GUID('{90810CB9-D427-48B6-81FF-92D4A2098B45}')
    version = (1, 0)
    flags = 0x8
    path = 'C:\\Documents and Settings\\Webroo\\Desktop\\p2p\\test\\sum.tlb'

##############################################################################

class IDualSum(IDispatch):
    """IDualSum Interface"""
    _iid_ = GUID('{6EDC65BF-0CB7-4B0D-9E43-11C655E51AE9}')


IDualSum._methods_ = IDispatch._methods_ + [
    STDMETHOD(HRESULT, "Add", c_double, c_double, POINTER(c_double)),
]

##############################################################################

class CSum:
    """CSum Class"""
    _reg_clsid_ = '{2E0504A1-1A23-443F-939D-869A6C731521}'
    _com_interfaces_ = [IDualSum]

from sum_p import *

from ctypes.com.automation import DualObjImpl

class SumObject(DualObjImpl):
        _com_interfaces_ = [IDualSum]
        _typelib_ = SumLib
        _reg_progid_ = "ctypes.SumObject"
        _reg_desc_ = "Sum Object"
        _reg_clsid_ = CSum._reg_clsid_

        def IDualSum_Add(self, this, a, b, presult):
              presult[0] = a + b
              return 0

if __name__ == '__main__':
          from ctypes.com.server import UseCommandLine
          UseCommandLine(SumObject)

_______________________________________________
Python-win32 mailing list
Python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to