2017-10-06 50 views
-1

我在Visual Studio中使用C++進行編程。運行代碼在dll中使用時不起作用

這是我的子程序,這給了我一個特定的值從雙陣列回:

double specific_value_search(std::string mol_fractions_name[], std::string mass_fractions_name_output[], double mass_fractions_output[], int molecule) 
{ 
    double specific_value=5;                
    std::string a = mol_fractions_name[molecule]; 
    std::string b; 
    for (int i = 0; i <= 11; i++) 
    { 
     b = mass_fractions_name_output[i]; 
     if (a.compare(b) == 0) 
     //if ((a.find(b) != std::string::npos))...this was my second try           // sollte string b in Zeile a gefunden werden, dann... 
     { 
      specific_value = mass_fractions_output[i]; 
      break; 
     } 
    } 
    return specific_value; 
} 

所以當我執行在我的項目這段代碼到一個.exe,代碼運行正常。 但是當我把它編譯成一個DLL,通過一個外部程序的運行它,值返回5,因爲我initalisation(不初始化,因爲試圖返回未初始化的變量程序崩潰。

我增加值從下面

在截圖視覺工作室有沒有人有什麼建議嗎?

Screenshot 1 - values from visual studio

Screenshot 2 - values from visual studio

+1

你能否讓[mcve]至少顯示你如何調用該方法? – user463035818

+0

如果你打算使用'std :: string',爲什麼不'std :: vector '?你的代碼對傳遞的數組完全沒有邊界檢查,因爲沒有辦法進行邊界檢查。使用'std :: vector',至少你有'size()','at()'等來做這些事情。 – PaulMcKenzie

+0

你可以在'std :: string'中使用'operator ==',你不需要使用'compare'方法。 –

回答

0

如果你可以使用標準容器(std :: map或std :: unsorted_map),那麼這就變得微不足道了。

std::map<std::string, double> fractionNames; 
// fill map 
double specificValue = fractionNames[mol_fractions_name[molecule]]; 

如果它可能是molecule比名的數量較大,或者你需要生成一個錯誤,如果分數名稱未在地圖上找到,那麼你就必須添加一些代碼來檢測和處理這些情況。

如果您不能使用地圖,那麼你可以使用一個矢量

struct FractionName { 
    std::string name; 
    double value; 
} 
typedef std::vector<FractionName> FractionNameVector; 
FractionNameVector fractionNames; 
// again fill fractionNames 

FractionNameVector::iterator iter = std::find(fractionNames.begin(), fractionNames.end(), SearchPredicate(mol_fractions_name[molecule])); 

這將需要這樣

struct SearchPredicate 
{ 
    bool operator()(const FractionName& haystack) { return haystack.name == 
     needle; } 
    explicit SearchPredicate(const std::string name) : needle(name) {} 
    std::string needle; 
}; 

一個SearchPredicate,如果你使用的是C你可以使用lambda ++ 11或更高版本。

相關問題