我正在研究Unity插件项目并尝试从c#文件导入c ++本机dll.但我不断得到dllnotfoundexception.
c ++ dll代码:
extern "C" {
extern __declspec( dllexport ) bool IGP_IsActivated();
}
Run Code Online (Sandbox Code Playgroud)
c#代码:
[DllImport("mydll")]
private static extern bool IGP_IsActivated();
Run Code Online (Sandbox Code Playgroud)
Dll到位,FIle.Exists正常工作.所有依赖的dll都存在于同一层次结构中,但我仍然在dllnotfound异常中结束.
任何帮助,非常感谢!!
感谢这个Unity论坛帖子,我提出了一个很好的解决方案,可以PATH在运行时修改-environment变量:
Project\Assets\Wherever\Works\Best\Plugins.将以下静态构造函数放入使用该插件的类中:
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);
}
Run Code Online (Sandbox Code Playgroud)添加[InitializeOnLoad]到类以确保构造函数在编辑器启动时运行:
[InitializeOnLoad]
public class MyClassWhichUsesPlugin
{
...
static MyClassWhichUsesPlugin() // static Constructor
{
...
}
}
Run Code Online (Sandbox Code Playgroud)使用此脚本,无需复制DLL.Unity编辑器在Assets/.../Plugins/...-folder中找到它们,可执行文件在..._Data/Plugins-directory中找到它们(在构建时它们会自动复制).
好吧,我让它工作了。对于可能遇到此问题的其他人,如果您有多个 dll,则需要将辅助 dll 放在 Unity 编辑器的根级别(例如 C:\Program Files\Unity\Editor),并将脚本中实际引用的 dll 放入插件文件夹。这对我有用。
将 DLL(s) Unity 接口放在 Project\Assets\Wherever\Works\Best\Plugins 中。
将您的脚本未直接访问的任何依赖项 DLL 放在 Project 中。这将允许您的程序在编辑器中运行。
构建时,再次将依赖项 DLL 文件复制到构建目录的根目录(就在生成的可执行文件旁边)。这应该允许您的应用程序在运行时加载它们。
(提示:您可以使用Dependency Walker查看您的 DLL 并查看它们所依赖的内容。)
| 归档时间: |
|
| 查看次数: |
32073 次 |
| 最近记录: |