ConvertToSubClassCode for IDispatch
Phil Thompson
phil at riverbankcomputing.com
Sun Apr 30 15:27:20 BST 2023
On 30/04/2023 14:39, Weitian Leung wrote:
> Hello,
> I have a IDispatch related sdk header, say it contains two
> IDispatch interfaces:
> ```
> interface _Foo : public IDispatch {…};
> typedef interface Foo Foo; // No definition at all
> ```
Do you mean...
typedef interface _Foo Foo;
> `Foo` can be QueryInterface from `_Foo` in C++ (or just do a cast),
> and for this case I asume they are just the same class.
>
> As the sdk internal only uses the Foo interface, such as:
> ```
> interface Bar : public IDispatch
> {
> bool open(…, Foo** out);
> void dosomething(Foo* f);
> };
> ```
>
> So I use ConvertToSubClassCode to resolve the buggy sdk:
> ```
> class Foo /Abstract,NoDefaultCtors/
> {
> %ConvertToSubClassCode
> sipType = sipType__Foo;
> %End
> };
> ```
As Foo above doesn't have a super-class, and nothing sub-classes it, the
%ConvertToSubClassCode isn't having any effect.
> It works for `open`, but not for `dosomething` due to
> ConvertToSubClassCode make `open` returns a `_Foo`, they have no
> inherits from python’s view.
Sorry, I don't understand what you mean. What do you mean by "it works"?
> I can’t change the C++ sdk as it out of my control.
> So is there any chance to make SIP works for such case?
Your example is too incomplete to say.
Phil
More information about the PyQt
mailing list