- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我相当确定我可以安全地做:
void funcA(VARIANT &V,_variant_t &vt)
{
vt = V;
}
但反过来呢:
void funcB(VARIANT &V,_variant_t &vt)
{
V = vt;
}
我一直在我的应用程序中看到一些非常奇怪的行为,我将其归因于与 COM 相关的线程问题。但后来我想知道我是否错误地使用变体来搞砸内存。在 funcB 中,VARIANT V 是为 COM 调用准备的安全数组的一部分。对于我的 V=vt 行,我是否在做一个浅拷贝,当同一个变体被释放两次时,它会破坏事情?
我真的很喜欢 _variant_t 并避免使用所有::VariantXXX 方法,有没有一种巧妙的方法可以在 funcB 中使用 _variant_t 来自动复制?
最佳答案
首先,是的,通过像在 funcB()
中那样使用赋值运算符,您只调用浅拷贝(您可能想查看 oaidl.h 以查看 VARIANT
定义 - 它没有用户定义的赋值运算符,因此浅拷贝由编译器完成。
如果您从中复制的其他变体在您访问浅拷贝之前被清除(例如,如果变体类型是 VT_UNKNOWN
,则指向的对象可以简单地在之后被销毁通过调用 IUnknown::Release()
将引用计数设置为 0。
_variant_t
对您没有多大帮助,因为它没有复制到另一个对象的方法 - 请参阅类定义的 comutil.h - 它只会从另一个对象复制到自身。
最简单的方法是使用 VariantCopy()
。不确定在处理时是否会初始化 safearray。如果它是用具有 VT_EMPTY
的每个元素初始化的,您只需调用 VariantCopy()
。否则首先调用目标上的 VariantInit()
来初始化目标。为包含随机未初始化数据的目标调用 VariantCopy()
可能会导致未定义的行为。
关于c++ - 在 VARIANT 和 _variant_t 之间复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1791447/
我的泄漏检查器告诉我此函数中有第二次机会异常。 BOOL CADORecordset::SetFieldValue(LPCTSTR lpFieldName, CString strValue) {
我在终止 _variant_t 类型时遇到麻烦,它触发断点并且程序崩溃, 引起问题的部分代码如下: double ConnectToHYSYS::GetExergy() { //In this
我正在尝试将 Visual-C++ 代码转换为 Qt。 有没有等价于_variant_t的东西? 代码是: // // Get safarray containing all vectors fro
有一个用 VBA 编写的宏,我想从 C++ 调用它: Public Function MacroName() As DOMDocument 我是这样做的: _variant_t ret = d_pAp
我正在通过 ADO 从 excel 单元格中读取数据 while (!pRec->adoEOF) { _variant_t a = pRec->Fields->GetItem(long(0))
这是一个示例片段: _variant_t var; var.vt = VT_UNKNOWN; var.punkVal = unknownInterfaceSmartPointer; unknownIn
我正在尝试使用 ADO 库与 MDB 文件进行通信。此刻我可以阅读所有专栏。我的代码依赖于其他需要 wstring 作为参数的库。以下代码返回 _variant_t 数据类型,但是函数预期接收的参数是
在此示例中,m_Amount 是 CString。 stringToNumber 函数将其成功转换为 LONGLONG 数字。但是当我想将它分配给一个变体时,我得到了这个错误: error C2440
这是我想要加速的代码。它从 ADO 记录集中获取值并将其转换为 char*。但这很慢。我可以跳过 _bstr_t 的创建吗? _variant_t var = pRs-
我相当确定我可以安全地做: void funcA(VARIANT &V,_variant_t &vt) { vt = V; } 但反过来呢: void funcB(VARIANT &V,_va
我需要在 std::vector 之间进行转换和 _variant_t将数据写入/发送到某些文件(数据库、Excel 等)时避免循环 你能告诉我如何进行吗? 我想得到一个 std::vector并以某
在我的 MFC (VC2010 SP1) 项目中,我广泛使用第三方库在数据库中写入一些数据。这个库很旧(我发现它是为 VS2005 编译的)并使用 _variant_t 来处理数据。 无论如何,在特定
我正在尝试传递一个结构 e。例如: struct SVec3 { public: float X; float Y; float Z; }; 进入 _variant_t,将其存
我的任务是遍历 word xml 模式中的字段并替换图片。这些图片是转换为图像的excel图表。遍历架构中的字段也没有问题,删除找到的图像也没有问题。我的问题是在原始范围内重新插入内联形状。我将找到的
我正在使用 ATL(VS2008,所以 ATL9 IIRC)来创建 COM 对象,并且一直在使用 CComVariant 类(在 atlcomcli.h 中定义)来管理 VARIANT 类型。但是,还
我正在研究几个使用 ADO 访问 SQL Server 数据库的 Visual Studio 2015 C++ 项目类型。简单示例对表执行选择、读入行、更新每一行并更新表。 MFC 版本工作正常。 W
我是一名优秀的程序员,十分优秀!