none
WinRT 不能通过 IntPtr 将C#对象传参到 C++/CX么? RRS feed

  • 问题

  • 运行时提示,无法封送处理“parameter #1”: Windows 运行时封送拆收器不支持该类型。

    要传递指针,要怎么办

    IntPtr view = Marshal.AllocCoTaskMem(DataLoader.Loader.GetSizeShaderResourceView());
                        DataLoader.Loader.CreateDDSTextureFromMemory(
                            m_d3dDevice.NativePointer,
                            Marshal.UnsafeAddrOfPinnedArrayElement(data, 0),
                            (uint)dataSize,
                            resource,
                            view, 0
                            );
    2013年8月20日 6:11

答案

  • 好像不用这么复杂,指针实质就是整数,传递整数还是允许的,反正在C++内部都进行了类型转化,不如就把类型转换提到C#里面来做。

    不知道这样可以不

    参数就变成了 m_d3dDevice.NativePointer.ToInt32()
    2013年8月22日 6:41

全部回复

  • Hi Cocker Lee,

    论坛中有类似的讨论帖,大概的意思就是不能通过IntPtr来传递对象,不过下面叫Marian的MSFT给出了一个可供参考的办法。

    另外参考这篇文档,里面有提到IntPtr For internal use only。

    以上。

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.


    2013年8月21日 5:33
    版主
  • 好像不用这么复杂,指针实质就是整数,传递整数还是允许的,反正在C++内部都进行了类型转化,不如就把类型转换提到C#里面来做。

    不知道这样可以不

    参数就变成了 m_d3dDevice.NativePointer.ToInt32()
    2013年8月22日 6:41
  • 好像不用这么复杂,指针实质就是整数,传递整数还是允许的,反正在C++内部都进行了类型转化,不如就把类型转换提到C#里面来做。

    不知道这样可以不

    参数就变成了 m_d3dDevice.NativePointer.ToInt32()

    我看行。
    2013年8月22日 6:47
  • Hi Cocker,

    你可以尝试下,如果可行的话,请共享给论坛中的其他参与者,这样他们遇到问题也能轻松解决。

    --James


    <THE CONTENT IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED>
    Thanks
    MSDN Community Support

    Please remember to "Mark as Answer" the responses that resolved your issue. It is a common way to recognize those who have helped you, and makes it easier for other visitors to find the resolution later.

    2013年8月23日 6:00
    版主
  • 应该是可以了,但是有其他问题,整个程序还是没有运行起来,所以无法确定是不是真的解决了
    2013年8月23日 6:26