C++ 和 .NET - 从 'System::String ^' 转换为 '_variant_t'
Posted
技术标签:
【中文标题】C++ 和 .NET - 从 \'System::String ^\' 转换为 \'_variant_t\'【英文标题】: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'
我是否错过了转换或强制转换以使其正常工作?
【问题讨论】:
【参考方案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;
【讨论】:
工作就像一个魅力!非常感谢:)以上是关于C++ 和 .NET - 从 'System::String ^' 转换为 '_variant_t'的主要内容,如果未能解决你的问题,请参考以下文章
将结构数组从 C#(.NET Core) 传递到 C++(未管理)