Seems to be solved:
------------------------------------------------------------------------------------
/lib/site-packages/pycom/__init__.py
def GetObject(Pathname=None, Class=None, clsctx=None):

...if Class is not None:
        return GetActiveObject(Class, clsctx)
    else:
        #first check to see if its an in process COM object shared from VB 
before we check ROT
        v = pycomint.HostResolver(Pathname); 
        #print(type(v)) #<class 'PyIDispatch'> or <class 'NoneType'>
        if v is not None:
            return __WrapDispatch(v, Pathname, clsctx=clsctx)
        else:
            return Moniker(Pathname, clsctx)
------------------------------------------------------------------------------------
PythonCOM.cpp
static PyObject *pythoncom_HostResolver(PyObject *self, PyObject *args)
{
    int rv = 0;
    char* s;

    if(vbHostResolver == NULL) return Py_BuildValue("");
    if (!PyArg_ParseTuple(args, "s", &s)) return Py_BuildValue("");

    //PY_INTERFACE_PRECALL;
    rv = vbHostResolver(s, 0, 0, 0);
    //PY_INTERFACE_POSTCALL;
    
    if (rv == 0)  return Py_BuildValue("");

    return PyCom_PyObjectFromIUnknown((IUnknown*)rv, IID_IDispatch, FALSE);
}

---------------------------------------------------------------------------------------
VB6 implementation
Public Function HostResolver(ByVal buf As Long, ByVal v1 As Long, ByVal v2 As 
Long, ByVal v3 As Long) As Long
    
    On Error Resume Next
    
    Dim key As String
    Dim o As Object

    key = LCase(StringFromPointer(buf))
    Set o = SharedObjects(key)
    
    If Not o Is Nothing Then
        HostResolver = ObjPtr(o)
    Else
        HostResolver = 0
    End If
      
End Function


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

Reply via email to