2013-10-27 51 views
1

最近我寫了這樣的功能:如何使用parallel_for_each功能和__declspec(dllexport)的屬性,同時

#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中報告了以下錯誤:

error C1451: Failed to generate debug information when compiling the call graph for the concurrency::parallel_for_each

只要我刪除了DLLEXPORT修飾符,錯誤消失了,但我無法再將此函數導出到其他程序中。

我該如何解決這個問題?

+0

我現在使用Visual Studio 2013 Professional和Windows 8.1 x64,並且在我從win7-64和VS2012升級筆記本電腦之前,代碼運行良好。 – Stephen

+0

你好。這是一個難以解決的問題,我們無法重複複製,如果您能向我們提供更多信息,我們很樂意幫助您進行調查。您可以使用命令'cl/Bv/EHsc/MD/LD/Zi test.cpp'從Visual Studio 2013命令提示符編譯該程序嗎?如果它複製,你可以在運行該命令時共享(1)編譯器輸出,以及(2)運行'set TEMP'的結果?您可以使用此信息更新答案,或隨時通過[email protected]與我聯繫。謝謝! –

+0

@JamesMcNellis問題似乎解決了,我成功地用你給我的命令構建了目標dll,但是我仍然無法在Visual Studio中構建項目 – Stephen

回答

1

TMP環境變量值包含非ASCII字符時,我們觀察到錯誤C1451被報告。臨時解決方法是將用戶環境變量設置爲例如C:\tmp

+0

我不是專家,但我不明白這個答案與問題的關係。嘗試更具體。 – arman

+0

你可以更具體(沒有雙關語意思)? OP正在觀察錯誤C1451,上面的答案爲其提供了有效且經過驗證的解決方法。 你有沒有類似的問題,它沒有幫助? –

相關問題