Unity3D中C#调用iOS的静态库(*.a)
2016-04-01 19:53
2141 查看
C#端的处理
C#调用其他模块的接口都是通过DllImport的方式来实现的。首先导入名字空间
using System.Runtime.InteropServices;
声明需要使用的C接口
[DllImport("__Internal")] private static extern void __init (string appid);
[DllImport("__Internal")] private static extern void __setVersion (string version);
iOS库的处理
在iOS的工程中定义相应的C接口,并导出#ifdef __cplusplus extern "C" { #endif extern void __init(const char *appId); extern void __setVersion(const char *version); #ifdef __cplusplus } #endif
注意:unity调用Xcode封装的函数,声明时需要用extern "C";
但在实际的使用过程中,遇到一个奇怪的问题:
在OC SDK中,定义了一个 __setUseTestAddr()接口
U3d工程中使用如下:
但在unity3d工具中运行的时候,总是提示找不到方法的错误
如果直接build成xcode工程,又能正常运行。
经过查找资料,以及请教同事,终于发现问题的所在,需要添加一个真机平台的判断,因为调用的是iOS的静态库,必须在iPhone环境下才能运行,直接在U3D工具中跑是不行的
#if UNITY_IPHONE || UNITY_IOS if(Application.platform == RuntimePlatform.IPhonePlayer){ __setUseTestAddr(true); } #endif
相关文章推荐
- C#使用DllImport调用非托管的代码的方法
- c#的dllimport使用方法详解
- API ShowWindow
- c#调用Win32 API(C# DllImport用法)
- c#中DllImportAttribute用法汇总
- C#调用C++封装dll库方法
- C# 如何调用 C++ 的 DLL
- 从普通DLL中导出C++类(1) – dllexport和dllimport的使用方法(中英对照、附注解)
- 从普通DLL中导出C++类(2) – 细看导出C++类的底层机制
- c# 调用API
- 不允许 dllimport 静态数据成员
- C#使用DllImport调用非托管的代码
- C#调用C++Dll
- 从普通DLL中导出C++类 <二>
- 从普通DLL中导出C++类 <一>
- unity3d与ios相互调用
- DllImport System.DllNotFoundException 问题分析与解决
- .NET简谈互操作(三:基础知识之DllImport特性)
- LNK2019:win32下编写DLL,应用程序找不到DLL接口函数的一种情况
- 关于__declspec(dllimport)的理解