Problem using win32com

Discussion in 'Python' started by Guest, Feb 23, 2004.

  1. Guest

    Guest Guest

    Hi,

    A month ago, I decided to move from Delphi to Python/wxPython for a good deal of my development work, and for the past few projects (which included a full re-write of our point-of-sale system) I've had no problems and been very pleased with the move.

    We're Sage (accounting software) developers and frequently link into Line 50 using a Sage supplied COM server. In Delphi, the code to create the client and a workspace (which is required later) is as follows:

    SDO := CreateOLEObject('SDOEngine.10');
    WS := SDO.Workspaces.Add('abc');

    So naturally, I'd expect the following Python code to work:

    import win32com.client
    SDO = win32com.client.Dispatch("SDOEngine.10")
    WS = SDO.Workspaces.Add("abc")

    But at the last stage, I get an error:

    Traceback (most recent call last):
    File "<pyshell#4>", line 1, in -toplevel-
    ws=sdo.Workspaces.Add("ss")
    File "C:\PYTHON23\lib\site-packages\win32com\client\dynamic.py", line 154, in __call__
    return self._get_good_object_(self._oleobj_.Invoke(*allArgs),self._olerepr_.defaultDispatchName,None)
    com_error: (-2147352573, 'Member not found.', None, None)

    So I used MakePy to generate the relevant Python interface code, and tried the following:

    SDO=win32com.client.gencache.EnsureModule("{ACE2C5EC-2EC0-4AEB-8B0D-27A5A1ED6421}",0,10,0)
    WS=SDO.Workspaces.Add("abc")

    But now I get:

    Traceback (most recent call last):
    File "<interactive input>", line 1, in ?
    TypeError: unbound method Add() must be called with IWorkspaces instance as first argument (got str instance instead)

    The relevant MakePy generated code looks like this:

    class IWorkspaces(DispatchBaseClass):
    CLSID = IID('{7075CC61-F056-11D0-A34B-000000000000}')
    coclass_clsid = IID('{7075CC63-F056-11D0-A34B-000000000000}')

    def Add(self, Name=defaultNamedNotOptArg):
    ret = self._oleobj_.InvokeTypes(2, LCID, 1, (9, 0), ((8, 0),),Name)
    if ret is not None:
    ret = Dispatch(ret, 'Add', None, UnicodeToString=0)
    return ret

    class Workspaces(CoClassBaseClass): # A CoClass
    CLSID = IID('{7075CC63-F056-11D0-A34B-000000000000}')
    coclass_sources = [
    ]
    coclass_interfaces = [
    IWorkspaces,
    ]
    default_interface = IWorkspaces

    What am I doing wrong? And more importantly, what can I do about it? I suspect there's a really simple answer which begins "Chris, you're being a fool...", but it's now pretty late, and I have other matters to deal with for the next few hours, so any help would be much appreciated.

    Regards,


    Chris
     
    Guest, Feb 23, 2004
    #1
    1. Advertisements

  2. Guest

    oleaw Guest

    I am having a similar problem with a com+ API created in delphi. is this a
    win32com problem?
     
    oleaw, Feb 14, 2005
    #2
    1. Advertisements

  3. Guest

    oleaw Guest

    I am having a similar problem with a com+ API created in delphi. is this a
    win32com problem?
     
    oleaw, Feb 14, 2005
    #3
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.