2014-01-07 20 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

相关问题