【发布时间】:2010-09-08 12:22:06
【问题描述】:
所以很容易创建一个win 32项目并使用boost。我还没有尝试过,但我打算这样做。我想知道我是否可以在 CLR 模式下使用 boost。可能吗?有人试过吗?
【问题讨论】:
标签: visual-studio-2008 visual-c++ boost clr
所以很容易创建一个win 32项目并使用boost。我还没有尝试过,但我打算这样做。我想知道我是否可以在 CLR 模式下使用 boost。可能吗?有人试过吗?
【问题讨论】:
标签: visual-studio-2008 visual-c++ boost clr
是的,这应该不是问题。很少有本地 C++ 结构无法转换为 IL。 Varargs 曾经是一个问题,但已经解决了,我只知道 __fastcall 是不可翻译的。不会有问题,Boost不会使用它。我知道的唯一另一个问题是有很多全局变量。它们需要嵌入到 CLR 类中,并且一个类不能有超过 65535 个字段。当 CLR 加载程序尝试加载程序集时,您会遇到异常。你需要一些漂亮的、呃、特殊的代码来接近这个限制。
次要考虑是这样做是否真的有意义。首先使用本机代码的目的是利用代码优化器可以花在优化上的时间。您通过将代码翻译成 IL 来抛弃它,JIT 优化器没有同样的奢侈。
利用 C++ 互操作,它可以从托管值类型转换为本机类型,而无需编写任何胶水代码。只需即时关闭 IL 生成即可。像这样:
#pragma managed(push, off)
// Native code goes here
//...
#pragma managed(pop)
// Managed code goes here
【讨论】: