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){...} // 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);