開發的一個類庫,使用標准C++和STL開發,近來想要將其在CLR Form程序中使用。在此之前對於VC2005中C++/CLI對於兩種不同系統的集成的問題也有所耳聞,據說還做得不錯,於是就躍躍欲試。先寫了下面一段簡單的測試代碼,卻出現了意想不到的問題:
#include<cli/vector> //MSDN上看到的方式
#include <clIExt/vector> // 另外看到的一種方式
#include <iOStream>
#include <string>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
using namespace System;
int main(array<System::String ^> ^args)
{
Console::WriteLine(L"Hello World");
vector<string> myList;
vector<string>::iterator It;
myList.push_back("STL");
myList.push_back("CLI");
for(It = myList.begin(); It != myList.end(); It++){
cout<<(*It)<<endl;
}
// 和期待的一樣,上面代碼自然運行良好,於是寫了下面的另一組代碼 ;
vector<String^> myList2;
vector<String^>::iterator It2;
String^ h = gcnew System::String("STL");
myList2.push_back(h);
h = gcnew System::String("CLI");
myList2.push_back(h);
for(It2 = myList2.begin(); It2 != myList2.end(); It2++){
Console::WriteLine(*It2);
} vector<String^> myList2;
// 這裡就出現錯誤,莫名其妙的一些出錯信息,其間也試過把追蹤句柄改為String類型,不過同時出錯,於是 //無 奈,開始抓狂,在網上狂搜資料,得到的有用信息卻少之又少,幾乎沒有,還有人寫的例子程序也和我的一樣,但是我就奇怪為什麼我的程序編譯不過。
return 0;
}
後來查了一下,說是要用STL.Net,於是又恍然大悟,似乎找到了救命草,於是乎趕緊如法炮制,不料還是通不過,而這次的錯誤卻變了,說是無法找到頭文件,我就郁悶了,這MSDN上ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.VSADD.v10.en/dnvs05/Html/stl-netprimer.htm#stl-netprimer_topic4 也能搞錯,再加上兩種不同的方式,更是讓我無計可施。