问题标签 [variant]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
633 浏览

c++ - 散列 OLE 变体的推荐实现是什么?

OLE 变体,在旧版本的 Visual Basic 中使用并且在 COM 自动化中普遍使用,可以存储许多不同的类型:整数和浮点数等基本类型,字符串和数组等更复杂的类型,一直到IDispatch实现和指针变体的形式ByRef

变体也是弱类型的:它们将值转换为另一种类型而不会发出警告,具体取决于您应用的运算符以及传递给运算符的值的当前类型。例如,比较两个变体,一个包含整数1,另一个包含字符串"1",是否相等将返回True

因此,假设我正在处理底层数据级别的变体(例如VARIANT在 C++ 或TVarDataDelphi 中 - 即不同可能值的大联合),我应该如何一致地散列变体以使它们遵守正确的规则?

规则:

  • 散列不相等的变体应该在排序和直接相等方面比较为不相等
  • 对于排序和直接相等比较为相等的变体应该哈希为相等

如果我必须使用不同的排序和直接比较规则以使散列适合,那也没关系。

我目前的工作方式是将变体规范化为字符串(如果它们适合),并将它们视为字符串,否则我正在处理变体数据,就好像它是一个不透明的 blob,并对其进行散列和比较原始字节。当然,这有一些限制:数字1..10排序[1, 10, 2, ... 9]等。这有点烦人,但它是一致的,而且工作量很小。但是,我确实想知道这个问题是否有公认的做法。

0 投票
3 回答
4744 浏览

datetime - VBScript 是否有 DateTime.TryParse 等价物?

给定一个变体,VBScript 是否具有等效于 C# 的 DateTime.TryParse 方法?

0 投票
2 回答
5244 浏览

c++ - 识别类型

在我的应用程序中,有一个继承层次结构,其中只有位于继承链末端的类是非抽象类。还有一些 boost::variant 的用法。我想编写一个函数,它接受一个指针和一个类型,并说明对象是否属于该类型。

例如

现在,如果有一个 boost 变体,我想知道 boost 变体是否存储了该特定类型。有人可以帮我吗?我不想添加额外的参数来确定它是否是变体。即使是为了找出抽象性,我也在使用 boost::is_abstract..

谢谢,戈库尔。

0 投票
4 回答
7303 浏览

c - C 的变体数据类型库

是否有一个像样的开源 C 库来存储和操作
动态类型变量(又名变体)?我主要对原子值(int8、int16、int32、uint、字符串、blob 等)感兴趣,而 JSON 样式的数组和对象以及自定义对象也很好。这种库有用的一个主要情况是使用 SQL 数据库。

这种库最明显的特征是所有支持值的单一类型,例如:

其他功能可能包括将 Variant 对象与 C 结构相互转换(使用绑定表)、将值与字符串相互转换,以及与现有数据库库(如 SQLite)集成。

注意:我不认为这个问题是C 中通用数据类型的任何库的副本?,指的是“队列、树、地图、列表”。我所说的更侧重于使 SQL 数据库的使用大致与在解释语言中使用它们一样顺畅。

0 投票
1 回答
288 浏览

c++ - 在 Windows 2008 中,variant 和 bstr_t 之间的转换导致不一致的崩溃

我们有一个 C# 应用程序,它调用一个简单的 C++ 包装类,然后调用一个现有的 C++ DLL。C++ 代码都是 VC++ 6.0。

我们得到了不一致的行为,但是当它发生时,崩溃总是发生在 C++ 包装 DLL 中,并且总是在同一个地方(已经使用痛苦的日志语句确认)。除了 Windows 2008 之外,它在任何环境中都不会发生,因此我们怀疑某些糟糕但并非致命的内存垃圾正在发生,Windows 2008 正在以某种方式更加注意。

这是相关代码,如果有人对为什么这可能会崩溃有任何想法,将不胜感激。几天来我们一直在努力,项目时间表正在滑落,因为我们希望能够将一个简单的字符串返回给 C#...

有人告诉我,我们已经尝试使用 VariantInit 设置 VARIANT vresult,并在使用 VariantClear 完成时清除它,但这并没有帮助。

再次,非常感谢任何想法。

0 投票
3 回答
6222 浏览

delphi - 在 Delphi 中将对象转换为 OleVariant

有没有办法在 OleVariant 中传递一个包装并解开一个 TObject 后代?我正在尝试跨自动化对象传递 TObject。我知道这不是一个好主意,但我没有好的选择。

该对象将在来自同一自动化 dll 的对象之间传递,如果这有什么不同的话。

像这样的东西:

客户将使用它作为

这无法编译,返回

0 投票
2 回答
1929 浏览

com - 从 F# 调用 Matlab 的 MLApp.MLAppClass.FEval

Matlab 提供了一个支持远程执行任意函数(和代码片段)的 COM 接口。特别是,它有一个调用给定 Matlab 函数的 Feval 方法。此方法的第三个参数 pvarArgOut 具有 COM 类型 VARIANT*,并在 Visual Studio F# 编辑器中显示为以下类型的参数:

下面的代码调用 interp1,它在 Matlab 中返回一个矩阵(即 2D 双精度数组)结果,这对于大多数 Matlab 函数来说是正常的。

这段代码编译得很好,但是在调用 interp1 时,我得到了一个 COM 异常:

无论是使用新的 obj、新的 Array2D 还是 null 初始化 yi,我都会遇到相同的错误。

F# 如何翻译 VARIANT 输出参数?

更新

这是更正后的版本:

0 投票
1 回答
2628 浏览

c++ - boost::variant 的迭代器

嘿那里,

我正在尝试使现有代码适应 boost::variant。这个想法是对异构向量使用 boost::variant。问题是其余代码使用迭代器来访问向量的元素。有没有办法将 boost::variant 与迭代器一起使用?

我试过了

但它没有用。

编辑:谢谢你的帮助!但是在我的设计中,我需要从列表中获取一个元素并将其传递给代码的其他部分(这可能很糟糕,因为我使用的是 GSL)。使用迭代器的想法是我可以将迭代器传递给一个函数,该函数将对来自该特定元素的返回数据进行操作。我看不到如何使用 for_each 来做到这一点。我需要做类似的事情:

谢谢!

0 投票
1 回答
2032 浏览

c++ - 当在包含 SAFEARRAY 的 VARIANT 上调用时,VariantClear() 会引发异常

我正在尝试将 BYTES 数组中的一些数据包装到 VARIANT 中,但我似乎无法释放数据:

当我运行这段代码时......

我收到此消息:“在 ... in ... 0xC015000F 处出现未处理的异常:被停用的激活上下文不是最近激活的。”

顺便说一句,这条消息不会在我的 AfxMessageBox 中弹出。它似乎与变体类型有关,因为如果我不设置它,我不会得到异常。pBuffer 中的数据只是之前从 SAFEARRAY 中拉出的 BYTE 数组。

有人知道我在做什么错吗?

谢谢

0 投票
1 回答
1395 浏览

c++ - 对 COleVariant 进行空检查

是否可以对 COleVariant 进行空检查,或者至少检查它的类型是否设置为 VT_NULL?我看到有一个 ChangeType() 方法,但希望我能在尝试更改类型之前以某种方式弄清楚当前类型是什么,因为从 VT_NULL 更改为 VT_INT 会引发类型不匹配。