我有一个非托管库,我想从托管类中使用它。该功能的界面是:
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'
我该如何解决这个问题?
答案 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;
}
};
不完全是您正在寻找的答案,但我认为我会包含它,因为它是一个简单的修复。