欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

iOS与Unity交互笔记之参数传递

程序员文章站 2023-08-17 21:13:09
1. 调用方法一 unity调方法传参,有返回值 // unity代码 [dllimport("__internal")] // 给ios传string...

1. 调用方法一

unity调方法传参,有返回值

// unity代码
[dllimport("__internal")]
// 给ios传string参数,有返回值,返回值通过ios的return方法返回给unity
private static extern string getipv6(string mhost, string mport)
// ios代码
extern "c" const char * getipv6(const char *mhost, const char *mport)
{
  // strdup(const char *__s1) 复制mhost字符串,通过malloc()进行空间分配 
  // return strdup(mhost);
  return makestringcopy(mhost);
}

char* makestringcopy(const char* string)
{
  if (null == string) {
    return null;
  }
  char* res = (char*)malloc(strlen(string)+1);
  strcpy(res, string);
  return res;
}

如果unity传参为string类型,不执行strdup()方法而直接使用return方法,导致mhost没有分配内存空间而报错

这里的const char* 会被c#自动转换成string因为在.m文件中使用了内存申请,该段内存自然是处在堆内存中,这样转成string符合c#的内存管理机制,我们不用担心它的释放问题

如果unity传参为int等基础数据类型,可以直接使用return方法

调用dllimport(“”)方法,需要引入命名空间:using system.runtime.interopservices

2. 调用方法二

unity调方法传参,无返回值

// unity代码
// 传数据给ios
[dllimport("__internal")]
// 给ios传string参数,无返回值,返回值通过ios的unitysendmessage方法返回给unity
private static extern void setdate(string date);

// 接收ios的数据
public void getdate(string date)
{
}
// ios代码
extern "c" void setdate(const char *date)
{
  /**
  发送数据给unity
  @param obj 模型名
  @param method unity接收ios数据的方法名
  @param msg 传给unity的数据
  unitysendmessage(const char* obj, const char* method, const char* msg);
  */
  unitysendmessage("publicgameobject", "getdate", date);
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。