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;

CreateBufferそこから、および他のメソッドを呼び出すことができます

于 2013-03-08T22:10:37.270 に答える