从C#中的本机指针调用COM对象方法

时间:2013-03-08 22:07:35

标签: c# com interop

在C#中,是否有一种从本机指针调用COM对象方法的简单方法?

    [DllImport("d3d11.dll", CallingConvention = CallingConvention.StdCall)]
    private unsafe static extern int D3D11CreateDevice(
        void* arg0, int arg1, void* arg2, int   arg3, void* arg4,
        int   arg5, int arg6, void* arg7, void* arg8, void* arg9);

    public static void CreateDevice()
    {
        unsafe
        {
            IntPtr deviceOut;
            IntPtr immediateContextOut;
            int featureLevelRef;

            D3D11CreateDevice(
                (void*)IntPtr.Zero,
                1,
                (void*)IntPtr.Zero,
                32,
                (void*)IntPtr.Zero,
                0,
                7,
                &deviceOut,
                &featureLevelRef,
                &immediateContextOut);
        }
    }

在上面的代码中,我得到deviceOut,其类型为ID3D11Device*ID3D11Device接口有许多方法,例如CreateBuffer()

我可以使用deviceOut指针调用其中一些方法吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

如果您有指向COM对象的指针,则可以通过GetObjectForIUnknown将其转换为对象的实例。

IntPtr ptr = ...;
object unk = Marshal.GetObjectForIUnknown(ptr);
ID3D11Device dev = (ID3D11Device)unk;

从那里你可以调用CreateBuffer和其他方法