C++ cli C++/CLI托管与非托管短消息

C++ cli C++/CLI托管与非托管短消息,c++-cli,C++ Cli,我有一个非托管库,我想从托管类中使用它。该函数的接口为: GetProgress(short* value); 所以我在我的管理类中写道: short val = 0; GetProgress(&val); 我得到了以下错误: 错误C2664:“GetProgress”:无法使用[Type=short]将参数1从“short*”中的“cli::interior_ptr”转换为参数 我读了,所以我把代码改成: short val = 0; pin_ptr<short*> p

我有一个非托管库,我想从托管类中使用它。该函数的接口为:

GetProgress(short* value);
所以我在我的管理类中写道:

short val = 0;
GetProgress(&val);
我得到了以下错误:

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

我读了,所以我把代码改成:

short val = 0;
pin_ptr<short*> pVal = &val;
GetProgress(pVal);
short val=0;
pin_ptr pVal=&val;
GetProgress(pVal);
除了前面的错误,我还得到了

错误C2440:“初始化”:无法使用[Type=short*]从“short*”转换为“cli::pin_ptr”


我怎样才能解决这个问题?

这是一个有趣的问题

以下代码生成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;
    }
};

这不完全是您想要的答案,但我想我应该包括它,因为它是一个简单的解决方案。

这是一个有趣的解决方案

以下代码生成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;
    }
};
不完全是你想要的答案,但我想我会包括它,因为它是一个简单的修复