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