Dominik Heller wrote: > >> >>> obj_2.DoSomething(“MyArgument”) # doesn’t work >> What is the C++ signature of this method? > This would be the declaration in the C++ class header: > > class CMyCommand : public CCmdTarget { > // ... > afx_msg void DoSomething(LPCTSTR message); > // ... > }; > > with this being the dispatch macro in the corresponding cpp: > > DISP_FUNCTION(CMyCommand, "DoSomething", DoSomething, VT_EMPTY, VTS_BSTR)
That's odd. Is your application compiled with -DUNICODE? BSTR is always Unicode, but LPCTSTR depends on the compiled character set. I would expect it to be LPCWSTR. However, if it works for "obj_2.SubObject.DoSomething", then that's not a problem. What do you mean by "doesn't work"? Is the method missing, or do you get trash results? > Having GetSomeNumber as a property sounds false to me as well, it shouldn't > be possible to set the value this COM method returns. > It is declared/dispatched with: > > afx_msg long GetSomeNumber(); > DISP_FUNCTION(CMyCommand, "GetSomeNumber", GetSomeNumber, VT_I4, VTS_NONE) Well, it's all about interpretation. A method that returns one thing and accepts no parameters is (apparently) exposed by the Python COM wrapper as a read-only property, and that's a reasonable interpretation. > So if I understand you correctly, it should be possible to use all these > methods even with a dynamic python dispatch object, as long as they're > implemented correctly on C++ side? What could be the thing going wrong in > the C++ code? By "implemented correctly", I really meant "declared correctly". The IDispatch handler in your code doesn't have a clue what the C++ function signatures actually are. It has to trust your dispatch map. If there is disagreement, garbage results. > So if I'm aware that a python tuple is returned and the parameter list for > the call is thus shorter, I can still call it on a dynamic dispatch? That's the theory. ;) Most true COM-compliant functions return an HRESULT, with a by-reference parameter as the output value. In that case, the Python COM wrapper returns a tuple with those two values. > Basically I'm trying to find out how much my life would get easier if I > somehow generated those IDL-files, or if rather the existing C++ COM > interface needs to be fixed. That's a very good question. You will probably end up having to print out what type mapping the Python COM wrappers have done. That's easier if you have a makepy result from a type library, but I believe it's still possible with an IDispatch. I just haven't done it in a while to remember the recipe. -- Tim Roberts, t...@probo.com Providenza & Boekelheide, Inc. _______________________________________________ python-win32 mailing list python-win32@python.org https://mail.python.org/mailman/listinfo/python-win32