[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    ConvertToSubClassCode for IDispatch
From:       Weitian Leung <Just_Fancy () live ! com>
Date:       2023-05-19 12:15:36
Message-ID: TYAP286MB0540BA706EFD8B58CB1BB47C977C9 () TYAP286MB0540 ! JPNP286 ! PROD ! OUTLOOK ! COM
[Download RAW message or body]

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
```

`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
    };
```

It works for `open`, but not for `dosomething` due to ConvertToSubClassCode make \
`open` returns a `_Foo`, they have no inherits from python’s view.

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?

Thanks.


[Attachment #3 (text/html)]

<html xmlns:o="urn:schemas-microsoft-com:office:office" \
xmlns:w="urn:schemas-microsoft-com:office:word" \
xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" \
xmlns="http://www.w3.org/TR/REC-html40"> <head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-2022-jp">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
	{font-family:SimSun;
	panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:DengXian;
	panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
	{font-family:DengXian;
	panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
	{font-family:SimSun;
	panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	text-align:justify;
	text-justify:inter-ideograph;
	font-size:10.5pt;
	font-family:DengXian;}
.MsoChpDefault
	{mso-style-type:export-only;}
/* Page Definitions */
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.WordSection1
	{page:WordSection1;}
--></style>
</head>
<body lang="ZH-CN" link="blue" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US">Hello,</span></p>
<p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp; I have a IDispatch \
related sdk header, say it contains two IDispatch interfaces:</span></p> <p \
class="MsoNormal"><span lang="EN-US">```</span></p> <p class="MsoNormal"><span \
lang="EN-US">interface _Foo : public IDispatch {…};</span></p> <p \
class="MsoNormal"><span lang="EN-US">typedef interface Foo Foo; // No definition at \
all</span></p> <p class="MsoNormal"><span lang="EN-US">```</span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">`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.</span></p> <p class="MsoNormal"><span \
lang="EN-US"><o:p>&nbsp;</o:p></span></p> <p class="MsoNormal"><span lang="EN-US">As \
the sdk internal only uses the Foo interface, such as:</span></p> <p \
class="MsoNormal"><span lang="EN-US">```</span></p> <p class="MsoNormal"><span \
lang="EN-US">interface Bar : public IDispatch</span></p> <p class="MsoNormal"><span \
lang="EN-US">{</span></p> <p class="MsoNormal"><span \
lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bool open(…, Foo** \
out);</span></p> <p class="MsoNormal"><span \
lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void dosomething(Foo* f);</span></p> <p \
class="MsoNormal"><span lang="EN-US">};</span></p> <p class="MsoNormal"><span \
lang="EN-US">```</span></p> <p class="MsoNormal"><span \
lang="EN-US"><o:p>&nbsp;</o:p></span></p> <p class="MsoNormal"><span lang="EN-US">So \
I use ConvertToSubClassCode to resolve the buggy sdk:</span></p> <p \
class="MsoNormal"><span lang="EN-US">```</span></p> <p class="MsoNormal"><span \
lang="EN-US">&nbsp;&nbsp;&nbsp; class Foo /Abstract,NoDefaultCtors/</span></p> <p \
class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp; {</span></p> <p \
class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp; \
%ConvertToSubClassCode</span></p> <p class="MsoNormal"><span \
lang="EN-US">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sipType = \
sipType__Foo;</span></p> <p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp; \
%End</span></p> <p class="MsoNormal"><span lang="EN-US">&nbsp;&nbsp;&nbsp; \
};</span></p> <p class="MsoNormal"><span lang="EN-US">```</span></p>
<p class="MsoNormal"><span lang="EN-US" \
style="font-size:12.0pt"><o:p>&nbsp;</o:p></span></p> <p class="MsoNormal"><span \
lang="EN-US" style="font-size:12.0pt">It works for `open`, but not for `</span><span \
lang="EN-US">dosomething` due to ConvertToSubClassCode make `open` returns a `_Foo`, \
they have no inherits from python’s view.</span></p> <p \
class="MsoNormal"><span lang="EN-US"><o:p>&nbsp;</o:p></span></p> <p \
class="MsoNormal"><span lang="EN-US" style="font-size:12.0pt;font-family:SimSun">I \
can’</span><span style="font-size:12.0pt;font-family:SimSun">t<span \
lang="EN-US"> change the C++ sdk as it out of my control</span>.<span \
lang="EN-US"><o:p></o:p></span></span></p> <p class="MsoNormal"><span lang="EN-US" \
style="font-size:12.0pt;font-family:SimSun">So is there any chance to make SIP works \
for such case?<o:p></o:p></span></p> <p class="MsoNormal"><span lang="EN-US" \
style="font-size:12.0pt;font-family:SimSun"><o:p>&nbsp;</o:p></span></p> <p \
class="MsoNormal"><span lang="EN-US" \
style="font-size:12.0pt;font-family:SimSun">Thanks.<o:p></o:p></span></p> </div>
</body>
</html>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic