作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试像这样在 .NetCore 2.1 中加载 native 库:
[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");
}
但是函数 LoadLibrary 总是返回零。 此代码适用于 .NET Framework。
我不太确定 .NetCore 是否支持加载 native 库。如果可能的话,正确的做法是什么?
最佳答案
我认为您使用的是 32 位 DLL。在 netcore 中,无法使用 64 位进程加载 32 位 DLL。试试这个代码来检查:
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);
}
}
更新:如果你想强制 NetCore 在 x86 平台上运行(使用 32 位 DLL)。首先从 https://dotnet.microsoft.com/download/thank-you/dotnet-sdk-2.1.500-windows-x86-installer 下载 NetCore x86 .然后,您应该通过添加 RunCommand
并将 PlatformTarget
更改为 x86 来编辑 .CSPROJ
文件:
<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>
关于dll - 在 .Net Core 2.1 (Windows) 中加载 native 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53505541/
我正在开发一个需要能够平均三个数字的 Facebook 应用程序。但是,它总是返回 0 作为答案。这是我的代码: $y = 100; $n = 250; $m = 300; $number = ($y
我只是无法弄清楚这一点,也找不到任何对我来说有意义的类似问题。我的问题:我从数据库中提取记录,并在我的网页上以每个面板 12 条的倍数显示它们。因此,我需要知道有多少个面板可以使用 JavaScrip
我是一名优秀的程序员,十分优秀!