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