In my native plugin, I created the UnityPluginLoad / UnityPluginUnload function as what described in https://docs.unity3d.com/Manual/NativePluginInterface.html . However, I can't make the UnityPluginLoad() be called when using the plugin, although my own functions could be called from Unity C# script without any problem. In the C++ code, the UnityPluginLoad function is declared in the same way as the documentation: #include "IUnityInterface.h" extern "C" void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API UnityPluginLoad(IUnityInterfaces* unityInterfaces) I checked the exported names of the DLL, and can find UnityPluginLoad function there. Here is the list of the exported functions: _Cleanup@0 _Initialize@0 _ReturnIntFunc@0 _SetLogFunction@4 _UnityPluginLoad@4 _UnityPluginUnload@0 Among them, Cleanup(), Initialize(), ReturnIntFunc(), SetLogFunction() are all explicitly exported functions, and they all work fine. It seems UnitPluginLoad() is also exported with the same naming convention. I'm using Unity 5.4.0f3-FTP. Might it be a Unity version or platform specific problem? Thank you very much!