Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从C中的子文件夹导入.dll库#_C#_.net 3.5_Dllimport_Loadlibrary - Fatal编程技术网

C# 如何从C中的子文件夹导入.dll库#

C# 如何从C中的子文件夹导入.dll库#,c#,.net-3.5,dllimport,loadlibrary,C#,.net 3.5,Dllimport,Loadlibrary,当我将库与应用程序放在同一文件夹中时,我可以简单地: [DllImport("kernel32")] public extern static IntPtr LoadLibrary(string librayName); IntPtr iq_dll = LoadLibrary("IQPokyd.dll"); 我的app.config中也有这个 <?xml version="1.0" encoding="utf-8" ?> <configuration> <r

当我将库与应用程序放在同一文件夹中时,我可以简单地:

[DllImport("kernel32")]
public extern static IntPtr LoadLibrary(string librayName);

IntPtr iq_dll = LoadLibrary("IQPokyd.dll");
我的app.config中也有这个

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="plugins;" />
    </assemblyBinding>
  </runtime>
</configuration>


我可以加载这个库。问题是它正在使用一些配置文件,这些文件需要位于应用程序运行目录中。是否有可能告诉库它需要的文件与库在同一文件夹中?

您可以通过在应用程序的.config文件中添加探测标记来实现这一点。 例如,如果希望从/lib/子目录加载库,则配置如下所示:

<?xml version="1.0"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="lib"/>
    </assemblyBinding>
  </runtime>
</configuration>

由于DLL在当前目录中搜索配置,因此在加载当前目录之前临时更改它是有意义的:

string saveCurDir = Directory.GetCurrentDirectory();
Directory.SetCurrentDirectory(Path.Combine(Application.StartupPath, "plugins"));

IntPtr iq_dll = LoadLibrary("IQPokyd.dll");

Directory.SetCurrentDirectory(saveCurDir);

IQPokyd.dll
是.NET程序集吗?或者它是本地DLL?我想是C++中的第三方DLL。所以我需要这样导入它。我已经重写了这个问题。在这种情况下,
LoadLibrary
的完整路径应该会有所帮助。我知道你试过了。如果是这样的话,我相信错误在其他地方。当我尝试使用相对或绝对路径程序时,它甚至不会启动,抛出致命错误。但只要有库的名称,它就会通过,并且在方法调用之后会出现错误。如果不在plugins文件夹中,一切正常。我已经重写了这个问题。