none
问一个c++cli内部指针的奇怪的问题 RRS feed

  • 问题

  • ref class A{  public:    void Test()    {        //QueryPerfomanceCounter((LARGE_INTEGER*)&m_ticks);       __int64 ticks = 0;       QueryPerfomanceCounter((LARGE_INTEGER*)&ticks);     };  private:    __int64 m_ticks;};

    上面的代码中,注释行会产生不能将interior_ptr<Type>转成LARGE_INTEGER*)的编译错误,而它下面的调用确能够正常执行。

    为什么同样类型的数据成员和局部变量在内部指针转c++指针时会有不同的结果?

    2010年4月15日 1:37

答案

  • class A被分配在托管堆上。所有的成员变量也是托管对象。但是ticks是个局部变量,局部变量并不是托管对象。否则你自己创建在普通栈上的对象无法表示。
    麻烦把正确答案设为解答。
    • 已标记为答案 SunXiaojun 2010年4月16日 2:05
    2010年4月16日 1:34
    版主

全部回复

  • pin_ptr<
    LARGE_INTEGER
    > nativePtr = 
    &m_ticks
    ;
    QueryPerfomanceCounter( nativePtr );

    interior_ptr is a managed pointer. If you want to use it in native code, you can
    convert it by pin_ptr

    麻烦把正确答案设为解答。
    2010年4月15日 2:01
    版主
  • 那为什么

    __int64 ticks = 0;      

    QueryPerfomanceCounter((LARGE_INTEGER*)&ticks);

    这样子就可以呢?

    这个&ticks不也是interior_ptr么?

    2010年4月15日 2:27
  • class A被分配在托管堆上。所有的成员变量也是托管对象。但是ticks是个局部变量,局部变量并不是托管对象。否则你自己创建在普通栈上的对象无法表示。
    麻烦把正确答案设为解答。
    • 已标记为答案 SunXiaojun 2010年4月16日 2:05
    2010年4月16日 1:34
    版主