C ++ / CLI管理VS.不受管理的短期

时间:2012-02-29 10:07:17

标签: c++-cli

我有一个非托管库,我想从托管类中使用它。该功能的界面是:

GetProgress(short* value);

所以我在托管班写道:

short val = 0;
GetProgress(&val);

我收到以下错误:

  

错误C2664:'GetProgress':无法使用[Type = short]将'short *'中的'cli :: interior_ptr'转换为参数1

我看了this topic,所以我将代码更改为:

short val = 0;
pin_ptr<short*> pVal = &val;
GetProgress(pVal);

除了我之前的错误

  

错误C2440:'初始化':无法使用[Type = short *]

从'short *'转换为'cli :: pin_ptr'

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

这是一个有趣的。

以下代码生成C2664,因为val只能 是托管类型:

using namespace System;

void GetProgress(short* value)
{
    // unmanaged goodness
}

ref class XYZ : System::Object
{
    short val;

    void foo()
    {
        GetProgress(&val);
    }
};

但是如果你首先声明一个本地变量,它一切正常......

using namespace System;

void GetProgress(short* value)
{
    // unmanaged goodness
}

ref class XYZ : System::Object
{
    short val;

    void foo()
    {
        short x;
        GetProgress(&x);
        val = x;
    }
};

不完全是您正在寻找的答案,但我认为我会包含它,因为它是一个简单的修复。