1

在 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我可以使用指针调用其中一些方法吗?先感谢您。

4

1 回答 1

2

如果你有一个指向 COM 对象的指针,你可以通过GetObjectForIUnknown.

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

从那里您将能够调用 theCreateBuffer和其他方法

于 2013-03-08T22:10:37.270 回答