laden nativen Bibliotheken in .NetCore 2.1 (Windows)

stimmen
1

Ich versuche, native Bibliotheken in .NetCore 2.1 wie folgt zu laden:

[DllImport(kernel32.dll)]
public static extern IntPtr LoadLibrary(string dllToLoad);

[DllImport(kernel32.dll)]
public static extern bool SetDllDirectoryA(string lpPathName);

    ...

SetDllDirectoryA(pathToDll);

var pDll = LoadLibrary(pathToDll+dllName);
if (pDll == IntPtr.Zero)
{
    throw new System.ArgumentException(DLL not found, pDll);
}

Aber die Funktion Loadlibrary kehrt Null immer. Dieser Code funktioniert mit .NET Framework in Ordnung.

Ich bin nicht wirklich sicher, ob das Laden nativen Bibliotheken in .NetCore unterstützt wird. Wenn es möglich ist, was ist der richtige Weg, es zu tun?

Veröffentlicht am 27/11/2018 um 17:59
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
2

Ich glaube, Sie werden mit einem 32-Bit-DLL. In netcore könnte ein 32-Bit-DLL nicht mit einem 64-Bit-Prozess geladen werden. Versuchen Sie diesen Code zu überprüfen:

class Program
    {
        [DllImport("kernel32.dll")]
        public static extern IntPtr LoadLibrary(string dllToLoad);

        static void Main(string[] args)
        {
            if (System.Environment.Is64BitProcess)
            {
                Console.WriteLine("This is 64 bit process");
            }
            var pDll = LoadLibrary("aDLL.dll");
            if (pDll == IntPtr.Zero)
            {
                Console.WriteLine("pDll: " + pDll);
                throw new System.ArgumentException("DLL not found", "pDll");
            }

            Console.WriteLine("pDll: " + pDll);
        }
    }

Update : Wenn Sie möchten , zwingen Netcore auf x86 läuft Flachform (um 32 - Bit - DLL). Erster Download Netcore x86 von https://dotnet.microsoft.com/download/thank-you/dotnet-sdk-2.1.500-windows-x86-installer . Dann sollten Sie bearbeiten .CSPROJDatei durch Hinzufügen RunCommandund Ändern PlatformTargetauf x86:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <Prefer32Bit>false</Prefer32Bit>
    <PlatformTarget>x86</PlatformTarget>
    <Optimize>false</Optimize>
    <RunCommand Condition="'$(PlatformTarget)' == 'x86'">$(MSBuildProgramFiles32)\dotnet\dotnet</RunCommand>
    <RunCommand Condition="'$(PlatformTarget)' == 'x64'">$(ProgramW6432)\dotnet\dotnet</RunCommand>
  </PropertyGroup>

</Project>
Beantwortet am 28/11/2018 um 05:00
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more