unityでdllを呼び出す方法の概要


dllImport System.Runtime.InteropServices           ,  ASP.NET    DllImportusing System.Runtime.InteropServices;”。          DLL               。DllImport       ,             dll   。
 
  
DllImport      
 
  
  
namespace System.Runtime.InteropServices
   {
    [AttributeUsage(AttributeTargets.Method)]
    public class DllImportAttribute: System.Attribute
    {
public DllImportAttribute(string dllName){...}   //     dllName
public CallingConvention CallingConvention;      //       
public CharSet CharSet;                          //         
public string EntryPoint;                        //     
public bool ExactSpelling;                       //                 ,  false
public 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);