2014-01-07 23 views
0

我工作的一個託管C++應用程序,利用C#庫來填充ADO記錄的字段:C++和.NET - 從「系統:字符串^」轉換爲「_variant_t」

recordset->Fields->GetItem(L"Id")->Value = _variant_t(Library::IdGenerator->GenerateNewId()); 

但是,在將庫添加到記錄集之前,我遇到了將庫返回的.NET字符串轉換爲_variant_t的錯誤。

以下是錯誤我得到:

error C2440: '<function-style-cast>' : cannot convert from 'System::String ^' to '_variant_t' 

我缺少一個轉換或轉換爲得到這個工作?

回答

1

是的,需要轉換。 _variant_t類不是一個非常快樂的匹配,因爲一個深不可測的理由,它缺少一個構造函數採用BSTR,所以採用_bstr_t的構造函數沒有吸引力,因爲它複製了字符串。回到原生VARIANT類型,像這樣:

using namespace System::Runtime::InteropServices; 
... 
    String^ s = Library::IdGenerator->GenerateNewId(); 
    VARIANT v = { VT_BSTR }; 
    v.bstrVal = (BSTR)Marshal::StringToBSTR(s).ToPointer(); 
    recordset->Fields->GetItem(L"Id")->Value = v; 
+0

工作就像一個魅力!非常感謝 :) – miguelarcilla

相關問題