Laden...

Compact Framework, Interop und COM: Pointer to Pointer to Structure

Letzter Beitrag vor 11 Jahren 1 Posts 463 Views
Compact Framework, Interop und COM: Pointer to Pointer to Structure

Hi,

ich versuche mich gerade mit etwas Spaß an Interop mit COM und dem Compact Framework. Leider muss man beim Compact Framework die weite Strecke zu Fuß gehen und sich den Wrapper selber schreiben. Jedoch scheiter ich schon bei einem einfachen Methodenaufruf.

Die C++ Komponente hat folgende Signatur:


extern "C" HRESULT WINAPI  GetXRApplicationInstance(
__deref_out_opt IXRApplication** ppApplication
);

Demnach erfolgt der Aufruf von der C#-Seite folgendermaßen:


public static class XamlRuntime
{
    [DllImport("xamlruntime")]
    extern public static int GetXRApplicationInstance(out IntPtr ppApplication);
}

Das C++ "Interface" IXRApplication sieht auf der C++ Seite so aus:


class __declspec(novtable) __declspec(uuid("{27CB6133-DD53-4E54-9ACF-9E5BF64CFE6F}")) 
IXRApplication : public IUnknown
{
    ...
}

und auf der C# Seite:


[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("27CB6133-DD53-4E54-9ACF-9E5BF64CFE6F")]
[ComImport]
public interface IXRApplication
{
}

Setze ich das ganze jedoch ein mit folgendem Code (C#):


private readonly IntPtr _nativeObject;

    public Application()
    {
        XamlRuntime.GetXRApplicationInstance(out _nativeObject);  
        var app = Marshal.GetTypedObjectForIUnknown(_nativeObject, typeof(IXRApplication));
    }

So fliegt mir das ganze mit einer "Access Violation" Exception um die Ohren. Leider bin ich mittlerweile am Ende wo und wie ich das debuggen oder wo mein Fehler stecken könnte? Hat da jemand einen Einfall ev. ?

Kontakt & Blog: www.giesswein-apps.at