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