Khangura,Gindi wrote: > I have a COM server implemented in Python 2.7 (using pythoncom) that I > am able to call using a Python or VBScript client. I would like to > call the COM server from C/C++ code as well, but cannot find any > information regarding this. > My intention is to have a Python-only COM server that can be accessed > by a Java application, VBScript script, and C/C++ DLL; this question > is just focusing on the C/C++ part of it.
Because C++ is a lower-level language, accessing an object is much wordier. In this particular instance, what you have is a late-binding "dispatch" interface, meaning that you can't just define a C++ class and fetch a pointer. You have to access everything indirectly. It's a pain in the ass. Here's a web page to get you started. https://msdn.microsoft.com/en-us/library/windows/desktop/ms221694.aspx The first sample shows how to start from a ProgID or CLSID (which you have) and get an IDispatch interface pointer. The second example shows a general-purpose "Invoke" function that can call a method on an IDispatch interface, given the method name and a list of parameters. You have to fetch the ID number for the method you want to call, then you have to create an argument array, then you call IDispatch::Invoke for that ID number. To call your one example function, this is approximately it: CComPtr<IDispatch> pDispatch; pDispatch.CoCreateInstance( your_clsid ); DISPID id; pDispatch->GetIDsOfNames( IID_NULL, L"getNextNum", 1, LOCALE_USER_DEFAULT, &id ); DISPPARAMS dparams; ZeroMemory( &dparams, sizeof(DISPPARAMS) ); VARIANT vRet; VariantInit( &vRet ); Invoke( pDispatch, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dparams, &vRet, NULL, NULL ); The result comes back in vRet. The type will probably have vRet.vt == VT_I4, and the value is in V_I4(&vRet). This is why most people don't use late-binding IDispatch objects from C++. -- Tim Roberts, t...@probo.com Providenza & Boekelheide, Inc. _______________________________________________ python-win32 mailing list python-win32@python.org https://mail.python.org/mailman/listinfo/python-win32