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