gpt4 book ai didi

c# - 如何通过 out 参数将变量从 iOS native 代码返回到 C#?

转载 作者:太空宇宙 更新时间:2023-11-04 02:30:08 25 4
gpt4 key购买 nike

下面是一个函数的一小段代码片段,它应该通过 out 参数将整数值 (42) 从 iOS native 代码返回到 C#:

iOS 代码:

extern "C" {
void _GetInt(int intVal) {
intVal = 42;
}
}

C# 代码(单声道/Unity):

[DllImport("__Internal")]
private static extern void _GetInt([Out] int retVal);

public static void getInt() {
int intVal = 1234;
if (Application.platform == RuntimePlatform.IPhonePlayer) {
_GetInt(intVal);
Debug.Log("intVal: "+intVal);
}
}

现在,当调用 getInt() 时,intVal 的值保持在 1234,而不是变成 42。

你知道这里出了什么问题吗? “[Out] int retVal”的声明是否足以让单声道将 intVal 的值复制回来?不幸的是 docs解释得不够详细,非常感谢您的帮助。

最佳答案

看起来比 Object-C 更像 C/C++ 函数。

无论如何,要修改参数的值,您必须将其作为引用或指针传递

您现在将其作为值传递。 Google “C++ 按值、引用和指针传递”。在制作插件时,如果要修改参数,最好使用指针而不是引用。

对于 C#,使用 out 而不是 [Out]。它们之间存在差异,[Out] 在性能方面较慢,尤其是在传递数组时,因为编译器会自动为您做一些事情。

C++:(注意 intVal 之前的 *):

extern "C" {
void _GetInt(int *intVal) {
*intVal = 42;
}
}

C#:

[DllImport("__Internal")]
private static extern void _GetInt(out int retVal);

最后,根据你的最后一个问题,我建议你在继续使用你的插件之前学习 C 和 C++。了解指针、分配和取消分配内存、按值、引用或指针传递。如果不这样做,您可能会以内存泄漏和游戏中的一些未定义行为而告终。

关于c# - 如何通过 out 参数将变量从 iOS native 代码返回到 C#?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44483852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com