C#和PInvoke进入32/64位DLL

这个问题已经在这里有了答案:            >            Target 32 Bit or 64 Bit native DLL depending on environment                                    3个
我正在创建一个类库,希望最终将其放在NuGet上.现在,它的目标是AnyCPU.

现在,我想将PInvoke插入DLL,该DLL具有32位和64位版本.最初,我以为我只会使用32位版本,但这引发了BadImageFormatException.我将库更改为仅针对X86,并且在此方法有效的同时,它也要求调用者也是32位进程.这对于NuGet项目自然不起作用.

感谢有关如何使用本机库的32/64位版本以及如何将其打包到NuGet中的任何想法(最好不要使用2个不同的程序集).

解决方法:

您可以在运行时检查平台并将PInvoke插入不同的DLL.

static void NativeFuncWrapper(){
    if(Environment.Is64BitProcess){
        NativeFuncWrapper64(); //this calls 64-bit dll
    }else{
        NativeFuncWrapper32(); //this calls 32-bit dll
    }
}

如果希望它在不使用Environment.Is64BitProcess的情况下工作,请阅读How to know a process is 32-bit or 64-bit programmatically以获取替代方法.

上一篇:尝试运行ASP.NET 5 Docker容器的异常


下一篇:c#-将Roslyn代码重构为NuGet包