PCRE的AnyCPU .net包装器

时间:2016-05-11 12:52:42

标签: c# .net visual-c++ pcre pcre.net

我想要一个用于C#的PCRE的AnyCPU dll。在当前可用的PCRE.NET中,由于其C ++依赖性,我们可以将其设置为32位或64位。是否存在可以真正实现MSIL的实现,例如使用带有if else的DllImport来根据应用程序选择正确的源。如果没有,任何人都可以指导如何制作一个。任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

  

免责声明:我是PCRE.NET的作者。

PCRE.NET是一个AnyCPU程序集,它同时提供x86 x64版本的本机库。它将在运行时选择正确的一个。它不会运行或ARM或任何其他架构。

如果您需要一些细节,主MSIL程序集在其资源中包含两个混合模式程序集。在运行时,它将选择正确的一个,将其解压缩到%TEMP%,然后加载并使用它。

您需要安装MSVC 2015 redistributable软件包,因为C ++ / CLI部分依赖于它。

要使该库与.NET 4兼容,您必须使用IReadOnlyList<T>IList<T>Volatile.Write替换某些接口,例如Thread.VolatileWrite等。< / p>

关于这一行:

System::Threading::Volatile::Write(_calloutInfoByPatternPosition, dict);

您可以将其替换为:

#undef MemoryBarrier
System::Threading::Thread::MemoryBarrier();
_calloutInfoByPatternPosition = dict;

不是那么漂亮,但有效。

最后但并非最不重要的是,确保运行构建脚本build/Build.Bat)来编译库,因为它将执行在PCRE中嵌入混合模式程序集所需的步骤.NET.dll。