<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#ffffff">
    Jonathan,<br>
    <br>
    (Sorry, I accidentally replied directly the first time)<br>
    <br>
    The CCW is working now. It turns out that the code I used to debug
    the issue did not work as well as the non-debugging code. I'm not
    sure why I introduced the debugging code anyway, perhaps something
    else was wrong at that time.<br>
    <br>
    Maybe the COM interfaces are IUnknown on Linux/XPCOM and dual on
    Windows/COM? In that case it's probably more of a VirtualBox issue,
    rather than a problem in mono.<br>
    <br>
    Using InterfaceType(IUnknown) works on Linux, but raises exceptions
    on Windows (HRESULT: 0xC0000005 and System.ExecutionEngineException
    for two different calls I have tested). Using InterfaceType(Dual)
    works on Windows, but produces incorrect results on Linux. In
    particular, it appears as if the vtable is shifted - the value of a
    property 4 places down in the interface is returned (for one
    property get accessor I have tested).<br>
    <br>
    I will probably release the code some time soon.<br>
    <br>
    --<br>
    Ivo<br>
    <br>
    Op 26-4-2011 23:13, Jonathan Chambers schreef:
    <blockquote
      cite="mid:BANLkTim_7tHztKFH72nUva1wqtjJ8bQZVw@mail.gmail.com"
      type="cite">Ivo,
      <div><br>
      </div>
      <div>Both RCWs and CCWs should be working in mono. Please post
        more details of the issues you are hitting. I am using both RCWs
        and CCWs extensively in my applications.</div>
      <div><br>
      </div>
      <div>The InterfaceType&nbsp;attribute is interesting. I believe
        interfaces are dual by default (IDispatch based with a vtable),
        so if your interfaces really are dual this should work.</div>
      <div><br>
      </div>
      <div><br>
      </div>
      <div>Thanks,</div>
      <div>Jonathan<br>
        <br>
        <div class="gmail_quote">On Tue, Apr 26, 2011 at 4:47 PM, Ivo
          Smits <span dir="ltr">&lt;<a moz-do-not-send="true"
              href="mailto:Ivo@ufo-net.nl">Ivo@ufo-net.nl</a>&gt;</span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt
            0.8ex; border-left: 1px solid rgb(204, 204, 204);
            padding-left: 1ex;">In Mono COM/XPCOM interop, Runtime
            Callable Wrappers appear to be<br>
            implemented and work correctly with VirtualBox, although
            it's not<br>
            directly compatible with COM interop in the Microsoft .Net
            runtime: the<br>
            interop assemblies generated by VS.Net cause crashes
            (segmentation<br>
            fault) and for interfaces written in C#, Mono needs the<br>
            [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
            attribute on the<br>
            interfaces, while this attribute breaks the interface in MS
            .Net. If<br>
            anyone has more information, or would like to have more
            information, let<br>
            me know. For now, I will work around this by using
            different, equally<br>
            named interop assemblies exposing the same interfaces.<br>
            <br>
            I have not been able to get COM Callable Wrappers to work
            yet. I can get<br>
            an IUnknown interface pointer for the managed object (using<br>
            Marshal.GetIUnknownForObject), I can use Marshal.AddRef on
            this pointer,<br>
            and I can pass this pointer to the COM code. Presumably when
            the COM<br>
            code makes a call on the CCW interface, a segmentation fault
            occurs.<br>
            This is still pretty much a black box for me, so before I
            investigate<br>
            any further: have CCWs been implemented in Mono and are they
            supposed to<br>
            work? Has anyone successfully used them?<br>
            <br>
            The stack trace of the crash is short and not very useful:<br>
            Native stacktrace:<br>
            <br>
            Segmentatiefout<br>
            <font color="#888888"><br>
              --<br>
              Ivo<br>
              _______________________________________________<br>
              Mono-devel-list mailing list<br>
              <a moz-do-not-send="true"
                href="mailto:Mono-devel-list@lists.ximian.com">Mono-devel-list@lists.ximian.com</a><br>
              <a moz-do-not-send="true"
                href="http://lists.ximian.com/mailman/listinfo/mono-devel-list"
                target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
            </font></blockquote>
        </div>
        <br>
      </div>
    </blockquote>
  </body>
</html>