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

Simple convert C++/CLI int^ to unmanaged int*

这是非常基础的,应该很容易找到。在我的搜索中,我得到的只是更复杂的解决方案。转换字符串、编组、固定对象。如何简单地将 C++/CLI int^ 指针转换为 C++/CLI 中的本机 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;
}

请注意,简单地 return 值可能会更好。当 return 值用于错误检查时,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;
}