unity中调用dll(char*,以及带有函数指针的参数)方法总结
来源:互联网 发布:呼叫中心排班软件 编辑:程序博客网 时间:2024/06/05 18:12
dllImport是System.Runtime.InteropServices命名空间下的一个属性类,因此ASP.NET中要使用DllImport的,必须在先“using System.Runtime.InteropServices;”。其功能是提供从非托管DLL导出的函数进行调用所必需的信息。DllImport属性应用于方法,要求最少要提供包含入口点的dll的名称。
DllImport 属性定义
如下:
namespace System.Runtime.InteropServices { [AttributeUsage(AttributeTargets.Method)] public class DllImportAttribute: System.Attribute {public DllImportAttribute(string dllName){...} //定位参数为dllNamepublic CallingConvention CallingConvention; //入口点调用约定public CharSet CharSet; //入口点采用的字符接public string EntryPoint; //入口点名称public bool ExactSpelling; //是否必须与指示的入口点拼写完全一致,默认falsepublic bool PreserveSig; //方法的签名是被保留还是被转换public bool SetLastError; //FindLastError方法的返回值保存在这里public string Value {get {...}} } }
说明:
1、DllImport只能放置在方法声明上。
2、DllImport具有单个定位参数:指定包含被导入方法的 dll 名称的 dllName 参数。
3、DllImport具有五个命名参数:
a、CallingConvention 参数指示入口点的调用约定。如果未指定CallingConvention,则使用默认值CallingConvention.Winapi。
b、CharSet参数指定用在入口点的字符集。如果未指定CharSet,则使用默认值CharSet.Auto。
c、EntryPoint参数给出dll中入口点的名称。如果未指定EntryPoint,则使用方法本身的名称。
d、ExactSpelling参数指示EntryPoint是否必须与指示的入口点的拼写完全匹配。如果未指定ExactSpelling,则使用默认值false。
e、PreserveSig参数指示方法的签名被保留还是被转换。当签名被转换时,它被转换为一个具有HRESULT返回值和该返回值的一个名为retval的附加输出参数的签名。如果未指定PreserveSig,则使用默认值true。
f、SetLastError参数指示方法是否保留Win32“上一错误”。如果未指定SetLastError,则使用默认值false。
4、它是一次性属性类。
5、用DllImport属性修饰的方法必须具有extern修饰符。
首先要在Unity中导入相对应得DLL
C++ .h文件
extern "C" __declspec(dllimport) void Creat();
C#文件[DllImport("WebrtcClient")] public static extern void Creat();带char* 参数的方法
c++.h 文件
extern "C" __declspec(dllimport) void Connect(const char* szConnetId);
C# 文件
[DllImport("WebrtcClient")] public static extern voidConnect([MarshalAs(UnmanagedType.LPStr)]string connetId);MarshalAs属性指示如何在托管代码和非托管代码之间封送数据。
如果不加[MarshalAs(UnmanagedType.LPStr)] 在Unity中可能会出现崩溃
C++中使用指针是家常便饭了,也非常的好用,但是在C#中就强调托管的概念了,指针就不用想了。下面来看一下带有函数指针的参数的传递
C++.h文件
extern "C" __declspec(dllimport) void CallbackFunc(void(*SendMessageCallback)( const char* szMessage)// IN:回调函数指针);C#文件[DllImport("WebrtcClient", EntryPoint = "CallbackFunc")] public static extern void CallbackFunc(SendMessageFuncCallback sendMsgFunc);//(void(*SendMessageCallback)(const char*)); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] public delegate void SendMessageFuncCallback([MarshalAs(UnmanagedType.LPStr)]string message);
0 0
- unity中调用dll(char*,以及带有函数指针的参数)方法总结
- 生成dll文件以及python对DLL中函数的调用(参数类型以及返回值)
- C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)
- C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)
- C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)
- C# 调用C/C++ Dll(参数含char*指针,返回char*指针)
- C#调用C++DLL的小总结8---C++Dll中函数返回字符串指针
- C#中调用dll,函数参数带指针
- C#中调用C++的dll的参数为指针类型的导出函数
- C#中调用C++的dll的参数为指针类型的导出函数
- C#调用C++dll 中具有高维指针参数的接口函数
- 带有模板参数的函数指针
- unity中调用dll文件总结
- C#调用C++编写的DLL函数, 以及各种类型的参数传递 (转载)
- MFC的DLL中调用函数指针与主程序交互
- 在powerbuilder中调用外部DLL中含有CHAR* *类型参数时的解决方法
- DLL导出函数方法以及动态调用
- Unity 3D 调用DLL的方法
- 用事件和观察者模式解决经典面向对象题目:猫叫鼠跑人醒的题目
- 字符集与编码五之代码单元及length方法
- POJ 1113 Wall 凸包(模板题)
- Sass/Scss学习
- Android 4.0 Launcher2源码分析——Workspace切换AllApps流程
- unity中调用dll(char*,以及带有函数指针的参数)方法总结
- BZOJ 2875: [Noi2012]随机数生成器
- caffe训练 create_filelist.sh
- leetcode 520. Detect Capital(easy)
- ARC与MRC
- UNIX再学习 -- 函数 fork 和 vfork
- Spring MVC中使用Swagger生成API文档和完整项目示例Demo,swagger-server-api
- ARM开发基础积累
- Hadoop之MapReduce