简单地将C ++ / CLI int ^转换为unmanaged int *

时间:2015-02-14 01:53:19

标签: c++-cli native managed

这是基本的,应该很容易找到。在我的搜索中,我得到的是更复杂的解决方案。转换字符串,编组,固定对象。如何在C ++ / CLI中简单地从c ++ / CLI int ^指针转换为本机int *。

我的职能部门是

void Open(int ^Hndl)
{
    void Unmanaged_Open(Hndl); // How do you pass the pointer to this
}

,其中 void Unmanaged_Open(int * handle);

1 个答案:

答案 0 :(得分:1)

以下是在C ++ / CLI中实现输出参数的方法,例如C#的void func(out int x)。请注意,没有int^

void Open([OutAttribute] int% retval)
{
    int result;
    if (!UnmanagedOpen(&result))
         throw gcnew Exception("Open failed!");
    retval = result;
}

请注意,简单地返回值可能更好。当返回值用于错误检查时,Out参数大多出现在本机函数中。您可以在.NET中使用异常进行错误检查,如下所示:

int Open()
{
    int result;
    if (!UnmanagedOpen(&result))
         throw gcnew Exception("Open failed!");
    return result;
}

或者如果预期失败(例如,不受信任的输入),请实现TryXYZ模式(described on MSDN):

bool TryOpen([OutAttribute] int% retval)
{
    retval = 0;
    int result;
    if (!UnmanagedOpen(&result)) return false;
    retval = result;
    return true;
}