<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <p>I see - thanks a lot.</p>
    <p>There's two issues here:<br>
    </p>
    <p>* since we switched the translation of function pointers from
      interface to class + interface, when a function pointer code is
      embedded inside a struct, we lack the required "static"<br>
      * the new function pointer class lacks a package constructor
      (which we have in other classes)</p>
    <p>I'll fix that</p>
    <p>Maurizio<br>
    </p>
    <div class="moz-cite-prefix">On 15/02/2024 14:31, Duncan Gittins
      wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:CABOqcFuGFt8zNYE5yqMaMaEUgQzdWaSfjZkt+Zp6tBfpx56QXQ@mail.gmail.com">
      
      <div dir="ltr">
        <div>Two examples attached. This compiles: " new
          LPHANDLER_FUNCTION_EX();" whereas "new IUnknownVtbl().new
          QueryInterface();" does not because the IUnknownVtbl
          constructor is generated.<br>
        </div>
        <div><br>
        </div>
        <div>
          <div>
            Note that a compiler warning is only issued because after I
            generate 5 packages with jextract, I build them with a
            module-info.java <br>
          </div>
        </div>
        <div><br>
        </div>
        <div>/**<br>
           * Module definition for JEXTRACT based generated code<br>
           */<br>
          module jextract.duncan.win<br>
          {<br>
              //
          =======================================================================<br>
              // Exports:<br>
              exports duncan.win.advapi;<br>
              exports duncan.win.kernel;<br>
              exports duncan.win.ole;<br>
              exports duncan.win.shell;<br>
              exports duncan.win.user;<br>
          <br>
              //
          =======================================================================<br>
          }</div>
        <div><br>
        </div>
        <div>Kind regards</div>
        <div><br>
        </div>
        <div>Duncan<br>
        </div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Thu, 15 Feb 2024 at 13:38,
          Maurizio Cimadamore <<a href="mailto:maurizio.cimadamore@oracle.com" moz-do-not-send="true" class="moz-txt-link-freetext">maurizio.cimadamore@oracle.com</a>>
          wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div>
            <p>Can you please send one of the source file that is
              generating these warnings?</p>
            <p>Thanks<br>
              Maurizio<br>
            </p>
            <div>On 15/02/2024 12:23, Duncan Gittins wrote:<br>
            </div>
            <blockquote type="cite">
              <div dir="ltr">
                <div>These are trivial issues I noted when re-building
                  with latest jextract master (am now using LLVM13).</div>
                <div><br>
                </div>
                <div>I put all my generated code into a module
                  definition which exports each package generated by
                  jextract. The compiler warns that there are no
                  explicit contructors for each interface class type,
                  such as the inner or top level interface handlers such
                  as IUnknownVtbl.QueryInterface and
                  LPHANDLER_FUNCTION_EX:</div>
                <div><br>
                </div>
                <div>    [javac]
                  C:\mymoduleproject\generated\some\package\name\IUnknownVtbl.java:48:
                  warning: [missing-explicit-ctor] class
                  IUnknownVtbl.QueryInterface in exported package <a href="https://urldefense.com/v3/__http://some.package.name__;!!ACWV5N9M2RV99hQ!JWktJzjV6IXxP1Ztow5Nu8IBHQPBuqRlPe4zP_q2D4bzIgbdQkTuin4byR10rLXhj_RPM78NZuOQgc-EX_lmerZVQ45-ve34$" target="_blank" moz-do-not-send="true">some.package.name</a>
                  declares no explicit constructors, thereby exposing a
                  default constructor to clients of module
                  mymoduleproject<br>
                      [javac]     public class QueryInterface {</div>
                <br>
                <div>Also, shouldn't the inner classes for interfaces - 
                  like IUnknownVtbl.QueryInterface - be declared as
                  static? I assume that means the code generated could
                  be a tiny amount smaller as no implicit parent$this.<br>
                </div>
                <div><br>
                </div>
                <div>Headers used:  #include <objbase.h> +
                  #include <shlobj_core.h><br>
                </div>
                <div><br>
                </div>
                <div>Kind regards</div>
                <div><br>
                </div>
                <div>Duncan<br>
                </div>
              </div>
            </blockquote>
          </div>
        </blockquote>
      </div>
    </blockquote>
  </body>
</html>