gpt4 book ai didi

c# - 使用第三方库(带反射)较旧 .NET 版本的 .NET 应用程序

转载 作者:行者123 更新时间:2023-12-03 21:49:14 26 4
gpt4 key购买 nike

来自 http://www.codeproject.com/Articles/49003/SCSI-Library-in-C-Burn-CDs-and-DVDs-Access-Hard-Di 的第三方库 (Helper.dll)使用.NET 2.0。主要应用程序使用.NET 4.5。库中有以下代码:

memcpyimpl = (memcpyimplDelegate) Delegate.CreateDelegate(typeof(memcpyimplDelegate), typeof(Buffer).GetMethod("memcpyimpl", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static));

哪里

public unsafe delegate void memcpyimplDelegate(byte* src, byte* dest, int len);

在运行时引发错误,因为该代码可能使用最新程序集中的 Buffer 类,但 .NET 4.5 中没有 Buffer.memcpyimpl 方法。

如何使库使用.NET 2.0 中的 Buffer 类?

最佳答案

使用反射调用类的私有(private)方法确实是使代码在不同版本的 .NET 上失败的好方法。 Buffer 类在 .NET 4.x 中发生了更改,该方法现在名为 _Memcpy

您可以通过使用每个 Windows 版本上都存在的 DLL 来获得该方法的更具弹性的版本,并且由于 Windows 本身使用它而已经将其加载到您的进程中。也不完全安全,微软有一天可能会更改 DLL。但可能性很小,有很多开源工具都使用它(例如 MinGW)。

  [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)]
private static unsafe extern int memcpy(byte* dest, byte* srce, int bytes);

关于c# - 使用第三方库(带反射)较旧 .NET 版本的 .NET 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26016576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com