2012-12-06 86 views
2

我得到以下原型DLL:C++ DLL返回指針到std ::列表<性病:: wstring的>

DLL_EXPORT std::list<std::wstring>* c_ExplodeWStringToList(std::wstring in_delimiter, std::wstring in_string, int in_limit); 

應用程序使用此類似:

std::list<std::wstring>* exploded = mydllclass->c_ExplodeWStringToList(L" ", in_command.c_str(), 0); 

該作品偉大在XP 32下,但是當我在家裏用我的Vista 64試用這個程序時,我的程序就會關閉。沒有錯誤也沒有警告?

幾天前,DLL直接返回列表 - 沒有指針。但是我切換到了VC++ 2010 Express,並且如果不進行此修改,我無法編譯我的DLL。

我在這裏沒有看到什麼?

謝謝:)

更新:

DLL_EXPORT std::list<std::wstring>* c_ExplodeWStringToList(std::wstring in_delimiter, std::wstring in_string, int in_limit) 
{ 
std::list<std::wstring>* returnlist = new std::list<std::wstring>(); 
std::list<std::wstring>* stringlist = new std::list<std::wstring>(); 
UINT pos = 0; 

while(true) 
{ 
     pos = in_string.find(in_delimiter, 0); 

     if(pos == std::string::npos) 
     { 

      stringlist->push_back(in_string.substr(0, pos)); 
      break; 
     } 
     else 
     { 

      stringlist->push_back(in_string.substr(0, pos)); 
      in_string = in_string.substr(pos + in_delimiter.length()); 
     } 
} 

// **** 
// Here is missing some code I've commented out while searching for the error. 
// **** 
returnlist = stringlist; 

return returnlist; 
} 

牛逼

+0

請顯示DLL代碼的外觀,現在看。 –

回答

0

我沒有深入到代碼,但我來到了關於與DLL的工作結論是不返回任何東西但來自DLL函數的原始類型。這是因爲由於不同的編譯器或不同的開關或項目設置,結構和類不對齊,在DLL中和調用DLL的代碼中不具有相同的大小。

因此,從調用者應用程序中返回DLL列表可能會被視爲格式錯誤。

同樣的事情從DLL中拋出異常 - 拋出的類可能被捕獲代碼誤解。

所以,最好是隻導出返回原始類型的C函數(以表示錯誤代碼)。

+0

有道理..但你有任何提示我如何實現這樣的功能,只是返回一個原始數據類型? Atm我沒有想法...... :( – NV2000

相關問題