【问题标题】:C++ and .NET - Converting from 'System::String ^' to '_variant_t'C++ 和 .NET - 从 'System::String ^' 转换为 '_variant_t'
【发布时间】:2014-01-07 01:22:11
【问题描述】:

我正在开发一个托管 C++ 应用程序,该应用程序利用 C# 库来填充 ADO 记录集中的字段:

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'

我是否错过了转换或强制转换以使其正常工作?

【问题讨论】:

    标签: c# string c++-cli type-conversion variant


    【解决方案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;
    

    【讨论】:

    • 工作就像一个魅力!非常感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多