DllNotFoundException in unity3d plugin for c++ dll

unity-game-engine

Solution

Thanks to this Unity forum post I came up with a nice solution which modifies the `PATH`-environment variable at runtime:

- Put all DLLs (both the DLLs which Unity interfaces with and their dependent DLLs) in `Project\Assets\Wherever\Works\Best\Plugins`.

Put the following static constructor into a class which uses the plugin:

static MyClassWhichUsesPlugin() // static Constructor
{
    var currentPath = Environment.GetEnvironmentVariable("PATH",
        EnvironmentVariableTarget.Process);
#if UNITY_EDITOR_32
    var dllPath = Application.dataPath
        + Path.DirectorySeparatorChar + "SomePath"
        + Path.DirectorySeparatorChar + "Plugins"
        + Path.DirectorySeparatorChar + "x86";
#elif UNITY_EDITOR_64
    var dllPath = Application.dataPath
        + Path.DirectorySeparatorChar + "SomePath"
        + Path.DirectorySeparatorChar + "Plugins"
        + Path.DirectorySeparatorChar + "x86_64";
#else // Player
    var dllPath = Application.dataPath
        + Path.DirectorySeparatorChar + "Plugins";

#endif
    if (currentPath != null && currentPath.Contains(dllPath) == false)
        Environment.SetEnvironmentVariable("PATH", currentPath + Path.PathSeparator
            + dllPath, EnvironmentVariableTarget.Process);
}

Add `[InitializeOnLoad]` to the class to make sure that the constructor is run at editor launch:

 [InitializeOnLoad]
 public class MyClassWhichUsesPlugin
 {
     ...
     static MyClassWhichUsesPlugin() // static Constructor
     {
         ...
     }
  }

With this script there is no need to copy around DLLs. The Unity editor finds them in the `Assets/.../Plugins/...`-folder and the executable finds them in `..._Data/Plugins`-directory (where they get automatically copied when building).

Problem

I am working on the Unity Plugin project and try to import the c++ native dll from c# file. But I keep getting dllnotfoundexception. c++ dll code: ``` extern "C" { extern __declspec( dllexport ) bool IGP_IsActivated(); } ``` c# code: ``` [DllImport("mydll")] private static extern bool IGP_IsActivated(); ``` Dll is in place and FIle.Exists work properly. All dependent dlls are present at same hierarchy, but I still end up in dllnotfound exception. Any help, much appreciated!!

Original source