问题标签 [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 回答
1406 浏览

c++ - Variant * to string 抛出未知异常

我正在使用此代码在 C++ 上的 IWebBrowser2 网络浏览器中接收事件:

调用 (void)DocumentComplete 时出现此错误:

* webhost.exe 中 0x7c812afb 处未处理的异常:Microsoft C++ 异常:_com_error 在内存位置 0x0012ed50。*

如果在 DocumentComplete 上注释该行,则不会显示任何错误。也 try..catch 块不会捕获异常。

我想做的是使用 Variant * url 将其与 std::string 进行比较。

我怎样才能做到这一点?

0 投票
4 回答
800 浏览

c# - COM 方法调用在 C#、VB.NET 中失败,但在 Python 中有效

我在尝试使用的 COM 库时遇到问题。当我调用特定方法并传递它时,我得到一个 ArgumentException null。这发生在我的 C# 项目和 VB.NET 项目(我使用 调用该方法Nothing)中,我在 Visual Studio 2008 的“COM”列表中添加了库引用。当我在 Python 中调用相同的方法时,传入None,该方法按预期工作,没有错误。我的理解是 Python 通过 DCOM 与 COM 库进行交互(我只有最模糊的概念),而当我在 C#/VB.NET 项目中引用它时,我可能会直接使用 COM 库。会不会发生什么事情会导致我传递的参数在它到达 COM 库之前搞砸了?我不确定这里发生了什么。我最近将 COM 库更新到了较新的版本,所以我想知道我是否在某个地方遇到了版本冲突,从而导致了异常。我从我的 C# 和 VB.NET 项目中删除了对 COM 库的所有引用,删除了所有目录,binobj重新添加了引用。这确实导致 Interop.MyCOMLibrary.dll 文件显示在obj有今天的日期,而不是我一直看到的旧日期。

我对 COM 库的唯一文档描述了该方法,如下所示:

我现在正在尝试搜索有关Variant参数的问题。

编辑:因此,虽然Type.Missing其他解决方案可以让我顺利通过该方法调用,但尝试从该方法读取返回项目上的某些字符串属性会导致:

System.Runtime.InteropServices.COMException:项目不存在。

这是另一个在 Python 中工作但在 C# 中引发异常的示例,所以我猜测更多 DCOM 与 COM 的怪异。或者这可能是一个线程问题,因为我正在使用 MSTest 进行测试。

0 投票
1 回答
80 浏览

c# - .Net - Com PVariant 参数

我有点被一个奇怪的问题困住了。我需要通过第 3 方 Active-X 类型库控制一些硬件。我的程序是用 C# 编写的。问题是一个 API / COM 调用需要一个 PVariant 的引用 - 所以如果我正确地得到它一个指向 Variant 的指针。更糟糕的是,这只是不固定大小(元素计数)的 Varaint 数组的第一个地址。

问题是——除了这不是最佳实践之外——我没有机会改变这种方法,也没有办法解决它。

有人需要创建一个兼容 COM 的 Variant-array 并将它的起始地址传递给 COM 方法吗?这是怎么做的?

我将不胜感激任何帮助!

谢谢先进

科莱戈特

0 投票
2 回答
2600 浏览

c++ - C++ - 提升得到问题

有人知道boost::getfor 是否boost::variant是一个消耗性能的操作

现在,我正在重构性能关键部分中的一些旧代码,其中“变体”是由容器为每种可能的类型和对应enum的 .

显然,这很快,但很难看,现在当我必须重构代码以便它可以与另一种类型一起使用时,我想摆脱代码的旧部分并将其替换为boost::variant.

此外,我不能简单地“分析两个变体并进行比较”,因为这种重构是一件很麻烦的事情,而且会非常耗时。

boost::get<x>因此,如果有人知道与泛型类型调度相比的性能如何enum-based,如果您分享这些知识,我将不胜感激。

还有另一种boost::variant<types>与自定义访问者一起使用的变体(如boost::variant文档中所述) - 这可能比boost::get我的情况更快吗?

谢谢你。

0 投票
2 回答
2630 浏览

string - 如何在 VBscript 中将字符串数组转换为变量数组?

我在 vbscript 中使用一个函数,它返回一个变体字符串数组。

问题是我无法从该数组中获取作业 ID 值,因为 vbscript 不处理类型化变量。当我尝试对 JobIDs 数组执行任何操作时,它只会给出类型不匹配。我在这里找到了一些有希望的信息,但是当我使用转换功能时:

它给了我相同的类型不匹配错误。我在这里遗漏了一些明显的东西吗?显然,这是一个官方的微软解决方案,所以我不确定为什么它似乎有同样的问题,即首先实际上无法对字符串数组执行任何操作。我已经在很多地方看到我的问题的第一部分得到了回答,都指向 MS 解决方案,但我还没有看到有人成功使用该解决方案的任何后续报告。

0 投票
1 回答
2588 浏览

delphi - 如何为来自 TStream 的 Olevariant 变量赋值?

我需要从 Stream 中读取数据并将读取的缓冲区放入OleVariant(VarArray) 变量中。

如何将读取的值分配给TMemoryStream变量olevariant

我正在使用德尔福 5。

0 投票
4 回答
3539 浏览

delphi - 无效的变体类型错误 Delphi 2010

在 iccDynamicObject.define() -> tmp := locate(_id); 处设置 DELPHI 2010 断点 将导致@ Project Project1.exe 引发异常类 EVariantBadVarTypeError 并带有消息“无效的变体类型”。@

代码在DELPHI 7中测试,没有遇到这个问题!

附言。代码以 delphi-7 样式重写,没有用于演示问题的类内类型...

已解决 -> 不要使用类内泛型类型,例如

这样的事情会促使调试器或编译器做意想不到的事情!!!代码编译并正常工作。但在我的情况下,随着单元增长代码变得不稳定并强迫我进行一些代码重构,只是一点点,但不仅仅是不方便......

你被注意到了:)))

0 投票
4 回答
4575 浏览

c++ - 提升::变体到 std::string

我有一个看起来像这样的提升变体:typedef boost::variant<int, float, double, long, bool, std::string, boost::posix_time::ptime> variant;

我需要能够将此变体中的任何值转换为 std::string,我想知道是否有一些模板类型函数可以用来执行此操作?

或者什么是最有效的方法?

我目前会实现一堆重载函数,每个函数都采用一个类型,然后使用它进行转换,std::stringstream或者posix_time我会使用它的转换函数。也许有更好的方法?

0 投票
1 回答
1125 浏览

c - 如果变体具有 INF 或 NAN 值,如何使变体的 ChangeType 浮动?

我在变体中有浮点值,最初这个变体是 bstr 类型。我正在使用VariantChangeType更改为浮点类型。然后我从中获取浮点值,然后我将其转换为字节向量格式。

如果变体具有浮点值,则可以正常工作。如果变体具有INF值,则 VariantChangeType会失败。所以我从variant.fltVal 得到0。

如果变体具有 INF 或 NAN 值,如何将类型更改为浮动?我想在浮点数中获取 INF 或 NAN 值。

0 投票
1 回答
426 浏览

boost - 函数对象内部的内部调用,(Boost::apply_visitor 特定)

我目前正在写一个set expression evaluator,它生成set<T>和set<set<T>>,下面的代码是显示表达式的结果。

当我尝试使用集合代码评估集合集时,我遇到的问题正在发生,显然我正在使用它,因为这是一种很好的做法,但编译器似乎不喜欢我用来构造调用的语法。

有两条这样的线,它们产生痕迹..

e:\documents\level 3\advanced software engineering\coursework\coursework\boost\variant\detail\apply_visitor_unary.hpp(76) : error C2039: 'apply_visitor' : is not a member of 'std::set<_Kty>' 1> with 1> [ 1> _Kty=std::string 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(96) :见参考函数模板实例化'std ::basic_string<_Elem,_Traits,_Ax> boost::apply_visitor::ExpressionTree::string_visitor,const std::set<_Kty>>(const Visitor &,Visitable &)' 正在编译 1> 和 1> [ 1> _Elem =char, 1> _Traits=std::char_traits, 1> _Ax=std::allocator, 1> T=std::string, 1> _Kty=std::string, 1> Visitor=Context::ExpressionTree::string_visitor, 1> Visitable=const std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(90) : 在编译类模板成员函数 'std::string Context::ExpressionTree::string_visitor::operator ()(std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.cpp(337) : 参见类模板实例化 'Context::ExpressionTree::string_visitor ' 正在编译 1> 与 1> [ 1> T=std::string 1> ]ExpressionTree::string_visitor, 1> Visitable=const std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(90) : 在编译类模板成员函数'std ::string Context::ExpressionTree::string_visitor::operator ()(std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1 > ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.cpp(337) : 参见类模板实例化 'Context::ExpressionTree::string_visitor' 正在编译 1> 和 1> [ 1> T=std::字符串 1> ]ExpressionTree::string_visitor, 1> Visitable=const std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(90) : 在编译类模板成员函数'std ::string Context::ExpressionTree::string_visitor::operator ()(std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1 > ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.cpp(337) : 参见类模板实例化 'Context::ExpressionTree::string_visitor' 正在编译 1> 和 1> [ 1> T=std::字符串 1> ]] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(90) : 在编译类模板成员函数'std::string Context::ExpressionTree::string_visitor::operator ()( std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1> ] 1> e:\documents\level 3\advanced software engineering\ coursework\coursework\context.cpp(337) :请参阅对类模板实例化 'Context::ExpressionTree::string_visitor' 的引用 1> 编译 1> [ 1> T=std::string 1> ]] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.h(90) : 在编译类模板成员函数'std::string Context::ExpressionTree::string_visitor::operator ()( std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1> ] 1> e:\documents\level 3\advanced software engineering\ coursework\coursework\context.cpp(337) :请参阅对类模板实例化 'Context::ExpressionTree::string_visitor' 的引用 1> 编译 1> [ 1> T=std::string 1> ]字符串 Context::ExpressionTree::string_visitor::operator ()(std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.cpp(337) : 请参阅正在编译的类模板实例化 'Context::ExpressionTree::string_visitor' 1> 与 1> [ 1> T=std::string 1> ]字符串 Context::ExpressionTree::string_visitor::operator ()(std::set<_Kty>) const' 1> with 1> [ 1> T=std::string, 1> _Kty=std::set 1> ] 1> e:\documents\level 3\advanced software engineering\coursework\coursework\context.cpp(337) : 请参阅正在编译的类模板实例化 'Context::ExpressionTree::string_visitor' 1> 与 1> [ 1> T=std::string 1> ]请参阅对类模板实例化 'Context::ExpressionTree::string_visitor' 的引用 1> with 1> [ 1> T=std::string 1> ]请参阅对类模板实例化 'Context::ExpressionTree::string_visitor' 的引用 1> with 1> [ 1> T=std::string 1> ]

有谁知道如何表达这种呼叫?

干杯,亚历克斯