简单地将C++/CLI int ^转换为非托管int*



这是非常基本的,应该很容易找到。在我的搜索中,我得到的只是更复杂的解决方案。转换字符串、封送处理、固定对象。如何在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);

以下是如何在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模式(在MSDN上描述):

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

相关内容

  • 没有找到相关文章

最新更新