C# 如何使用LoadLibrary或任何其他方法加载dll及其依赖项

C# 如何使用LoadLibrary或任何其他方法加载dll及其依赖项,c#,dll,interop,silverlight-5.0,C#,Dll,Interop,Silverlight 5.0,我正在尝试加载一个库,用于interop,它有一些dll依赖项,所有名称我都知道,但位置是动态的。我可以在主dll上调用LoadLibrary,如果其他dll都在工作目录下,它就可以正常工作,但事实并非如此。我试着给每个人打电话,但没用 有什么想法吗?是否有LoadLibrary的替代方案 .NET 4.5 siverlight5项目,与fortran的互操作 var interopPath = CreateDllFromResource(dllName); va

我正在尝试加载一个库,用于interop,它有一些dll依赖项,所有名称我都知道,但位置是动态的。我可以在主dll上调用LoadLibrary,如果其他dll都在工作目录下,它就可以正常工作,但事实并非如此。我试着给每个人打电话,但没用

有什么想法吗?是否有LoadLibrary的替代方案

.NET 4.5 siverlight5项目,与fortran的互操作

        var interopPath = CreateDllFromResource(dllName);
        var d1=CreateDllFromResource("libgcc_s_dw2-1.dll");
        var d2 = CreateDllFromResource("libgfortran-3.dll");
        var d3 = CreateDllFromResource("libquadmath-0.dll");


        pDll = NativeMethods.LoadLibrary(interopPath);
        NativeMethods.LoadLibrary(d1);
        NativeMethods.LoadLibrary(d2);
        NativeMethods.LoadLibrary(d3);
        //oh dear, error handling here
        if (pDll == IntPtr.Zero)
        {
            throw new Exception("Dll Pointer is null! // Path: " + interopPath + "// Error: " + WSAGetLastError());
        }

        IntPtr pAddressOfFunctionToCall = NativeMethods.GetProcAddress(pDll, "ingammaextern_");
        if (pAddressOfFunctionToCall == IntPtr.Zero)
        {
            throw new Exception("Function Pointer is null!");
        }
必须调用LoadLibrary并使用SetDllDirectory才能使其工作,使用DllImport而不是LoadLibrary不起作用

    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
        private delegate void ingammaextern_(StringBuilder resulfilesparam);



{
   var dllName = "SubsCalculator1.dll";

            var interopPath = CreateDllFromResource(dllName);
            var d1 = CreateDllFromResource("libgcc_s_dw2-1.dll");
            var d2 = CreateDllFromResource("libgfortran-3.dll");
            var d3 = CreateDllFromResource("libquadmath-0.dll");

            string folderPath ="C:\folder\
            SetDllDirectory(folderPath);

            pDll = NativeMethods.LoadLibrary(interopPath);
}

我可以通过动态路径加载dll,但是依赖项呢?所有dll的加载方式都是相同的。使用SetDllDirectory函数hmm读取链接,让浏览器将可执行文件写入磁盘并执行它们。可能会出什么问题?这只是OOB。没有可执行文件,只有dll。SetDllDirectory也没有任何成功,它似乎什么也没做,但我会继续尝试。SetDllDirectory从哪里来?