登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 首页 >> SoftHub关联区 >> SoftHub关联区 >> 主题: [u3d][原创]Unity3d 中调用 dll 及 char * 参数以及 showmesage 的实现    [最新]
[u3d][原创]Unity3d 中调用 dll 及 char * 参数以及 showmesage 的实现
clq
浏览(0) - 2019-04-06 17:01:00 发表 编辑
经纬度拾取

关键字

[目前已存在于分组:]

关键字: u3d

[u3d][原创]Unity3d 中调用 dll 及 char * 参数以及 showmesage 的实现

今天本想调试一下 u3d ,没想到比我想像的要复杂一些. 步骤比较多,因此想用 messagebox.show 来调试下先算了. 不料 u3d (我的版本应该是 4.6 )下并不直接支持,要引入 .net sdk 的 System.Windows.Forms.dll 等等
才行. 据说有网友弄成功了,反正我是没有,心想干脆来个 dll 直接调用原生的好了. 结果很快弄好了,除了 char * 在 c# 中转换有点麻烦外一切都很顺利.

以下是实现方法:
1.生成的 dll 要放到项目的 Assets\Plugins 目录下,没有的话就手工建一个.
2.dll 中的函数默认是 stdcall 的,如果不是要加上 [DllImport("u3d_dll", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.Cdecl)]
这样的,而我的如下
    [DllImport("u3d_dll")]
    public static extern void show_message(ref byte s); //ok //调用方法 

3.char * 的传递其实不太容易,有些教程直接用函数声明搞个 string 参数出来,我觉得还是应该使用数据本身的内容,因此花了不少时间去找转换方法,最后使用的就是
ref byte s ,在 c# 脚本中调用的方法类似于
        byte[] byteArray = System.Text.Encoding.UTF8.GetBytes("ttt中文");
        dll_functions.show_message(ref byteArray[0]); //ref s[0]

这里还要注意,u3d 默认传递的是 utf8 的字节流,我转换成 gbk,gb2312 都不行,估计时当时的 u3d 版本功能还不支持的缘故.
        //byte[] byteArray = System.Text.Encoding.ASCII.GetBytes ("ttt中文"); //中文不行
        //byte[] byteArray = System.Text.Encoding.Default.GetBytes("ttt中文"); //u3d 下这样应该是 utf8
        //byte[] byteArray = System.Text.Encoding.GetEncoding("utf-8").GetBytes("ttt中文"); //u3d 下这样应该是 utf8//同 Default
        //byte[] byteArray = System.Text.Encoding.GetEncoding("gb2312").GetBytes("ttt中文"); //不行,gbk 也不行

4.我直接用的 delphi 的 showmessage 来实现,是可以阻塞住 update() 函数的.






clq  2019-04-06 17:17:54 发表 编辑

UnityEditor.EditorUtility.DisplayDialog("Title", "Content", "Button");  据说也行


总数:1 页次:1/1 首页 尾页  
总数:1 页次:1/1 首页 尾页  


该采集也在以下书单中



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:


本帖子属于以下条目(u3d)
Unity3D 基本技巧收集  
Unity3D 基本技巧收集

NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2017 clq, All Rights Reserved
CLQ工作室 版权所有