DllImport ("msvcrt.dll") не работает, когда он работает на Linux - PullRequest
1 голос
/ 20 сентября 2019

Я хочу сравнить массив из 2 байтов, используя функцию memcmp, используя следующий код:

[DllImport("msvcrt.dll",EntryPoint = "memcmp", CallingConvention = CallingConvention.Cdecl)]
  static extern int memcmp(byte[] b1, byte[] b2, long count);

Когда я запускаю свое приложение в Windows, оно работает нормально.Но когда я запускаю его в Linux, он дает следующее исключение

Unable to load shared library 'msvcrt.dll' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libmsvcrt.dll: cannot open shared object file: No such file or directory

Ниже приведен файл Docker

FROM microsoft/dotnet:2.2-sdk AS build-env
WORKDIR /app

COPY *.csproj ./
COPY NuGet.Config ./
RUN dotnet restore

# copy everything else and build
COPY . ./

RUN dotnet publish -c Release -o out

# build runtime image
FROM microsoft/dotnet:2.2-runtime

WORKDIR /app
COPY --from=build-env /app/out .

ENTRYPOINT ["dotnet", "XXX.dll", "YYY.dll"]

Пожалуйста, дайте мне знать, что мне следует использовать?

Ответы [ 2 ]

2 голосов
/ 20 сентября 2019

Вы не можете просто использовать DLL-библиотеку Windows в Linux.То, что у вас есть среда выполнения .NET Core в Linux, не означает, что вы можете использовать другие библиотеки / исполняемые файлы с другой платформы / ОС.

Вы должны найти другой код, который может сравнивать двухбайтовые массивы или придерживатьсяWindows как базовая ОС.

Посмотрите здесь: Сравнение двух байтовых массивов в .NET

0 голосов
/ 20 сентября 2019

@ Damien_The_Unbeliever.Спасибо за вашу помощь.Я использовал ниже код

 if (((ReadOnlySpan<byte>)slice).SequenceCompareTo((ReadOnlySpan<byte>)masterSlice) == 0)
                    isEqual = true;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...