如何同时使用parallel_for_each函数和__declspec(dllexport)属性

时间:2013-10-27 13:00:34

标签: c++ dllexport c++-amp

最近我写了一个这样的函数:

#include "amp.h"
#define DLLExport __declspec(dllexport)
using namespace concurrency;

namespace dll
{
    class SomeMethods
    {
    public:
        static DLLExport double CalcConvolution(double* mask, double* map, int size)
        {
            array_view<const double, 1> avMask(size, mask);
            array_view<double, 1> avOMap(size, map);
            array_view<double, 1> avCache(size, new double[size]);
            avCache.discard_data();
            parallel_for_each(
                avCache.extent,
                [=](index<1> idx) restrict(amp)
            {
                avCache[idx] = avMask[idx] * avOMap[idx];
            }
            );
            avCache.synchronize();
            double sum = 0;
            auto cache = avCache.data();
            for (int i = 0; i < size; i++)
                sum += cache[i];
            return sum;
        }
    };
}

Visual Studio报告了以下错误:

  

错误C1451:编译concurrency :: parallel_for_each

的调用图时无法生成调试信息

我删除DLLEXPORT修饰符后,错误消失了,但我无法将此功能导出到其他程序中。

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我们观察到TMP环境变量值包含非ASCII字符时报告的错误C1451。临时解决方法是将用户环境变量设置为例如C:\tmp