我正在创建一个 iOS 插件,它需要向 Unity 返回一个字符串(或 const char*)。我该如何实施?
我想澄清一下之前的答案。 C# 声明:
[DllImport("__Internal")]
private static extern string getString();
从 objc 返回一个字符串与@Cabrra 所说的完全一样:
char* convertNSStringToCString(const NSString* nsString)
{
if (nsString == NULL)
return NULL;
const char* nsStringUtf8 = [nsString UTF8String];
//create a null terminated C string on the heap so that our string's memory isn't wiped out right after method's return
char* cString = (char*)malloc(strlen(nsStringUtf8) + 1);
strcpy(cString, nsStringUtf8);
return cString;
}
extern "C" char* getString()
{
const NSString* str = @"string";
return convertNSStringToCString(str);
}
虽然有人提到这种方式会导致内存泄漏,但其实并不对。这种方式在Unity中工作得很好,没有发生泄漏(我测试了很多次)。统一明确指出 https://docs.unity3d.com/Manual/PluginsForIOS.html that
从本机方法返回的字符串值应采用 UTF-8 编码并分配在堆上。 Mono 编组对这样的字符串调用 free。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)