Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2008 我们可以使用;“促进”;我们自己的图书馆在CLR下编译?_Visual Studio 2008_Visual C++_Boost_Clr - Fatal编程技术网

Visual studio 2008 我们可以使用;“促进”;我们自己的图书馆在CLR下编译?

Visual studio 2008 我们可以使用;“促进”;我们自己的图书馆在CLR下编译?,visual-studio-2008,visual-c++,boost,clr,Visual Studio 2008,Visual C++,Boost,Clr,因此,创建win32项目并使用boost很容易。我还没有试过,但我打算试一下。我想知道我是否可以在CLR模式下使用boost。可能吗?有人试过吗?是的,应该没问题。很少有原生C++构造不能翻译成IL。Varargs曾经是个问题,但问题解决了,我只知道fastcall是不可翻译的。不会有问题的,Boost不会使用它。我唯一知道的另一个问题是有很多全局变量。它们需要嵌入到CLR类中,类的字段不能超过65535个。当CLR加载程序尝试加载程序集时,将出现异常。你需要一些漂亮的,呃,特殊的代码来接近这个

因此,创建win32项目并使用boost很容易。我还没有试过,但我打算试一下。我想知道我是否可以在CLR模式下使用boost。可能吗?有人试过吗?

是的,应该没问题。很少有原生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