問題タブ [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 Web ブラウザーでイベントをシンクしています。

(void)DocumentComplete を呼び出すと、次のエラーが発生します。

*webhost.exe の 0x7c812afb で未処理の例外: Microsoft C++ 例外: メモリ位置 0x0012ed50 で _com_error。

DocumentComplete の行にコメントを付けると、エラーは表示されません。また、try..catch ブロックは例外をキャッチしません。

私がやろうとしているのは、 Variant * url を使用して std::string と比較することです。

これどうやってするの?

0 投票する
4 に答える
800 参照

c# - COMメソッド呼び出しはC#、VB.NETでは失敗しますが、Pythonでは機能します

使用しようとしているCOMライブラリに問題があります。特定のメソッドを呼び出して渡すと、ArgumentExceptionが発生しnullます。Nothingこれは、Visual Studio 2008の「COM」リストからライブラリ参照を追加したC#プロジェクトとVB.NETプロジェクト(を使用してメソッドを呼び出す)の両方で発生します。Pythonでこれと同じメソッドを呼び出すと、None、メソッドはエラーなしで期待どおりに機能します。PythonはDCOMを介してCOMライブラリと対話することを理解しています(そして、それが何を意味するかについては最も曖昧な概念しかありません)が、C#/VB.NETプロジェクトでCOMライブラリを参照するときに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 パラメータ

私は奇妙な問題で少し立ち往生しています。サードパーティの Active-X タイプライブラリを介して一部のハードウェアを制御する必要があります。私のプログラムは C# で書かれています。問題は、1 つの API/COM 呼び出しで PVariant への参照が必要であることです。そのため、Variant へのポインターを正しく取得した場合。さらに悪いことに、これは、サイズ (要素数) が固定されていない Varaint 配列の最初のアドレスにすぎません。

問題は、これがベストプラクティスではないことに加えて、その方法を変更する機会がなく、回避する方法がないことです。

COM 互換のバリアント配列を作成し、その開始アドレスを COM メソッドに渡す必要があった人はいますか? それはどのように行われますか?

これについて何か助けていただければ幸いです!

高度なThx

コーレルゴット

0 投票する
2 に答える
2600 参照

c++ - C++ - ブースト取得質問

がパフォーマンスを消費する操作boost::getboost::variantあるかどうかを誰かが知っていますか

現在、パフォーマンスが重要な部分の古いコードをリファクタリングしています。ここでは、「バリアント化」が可能な各タイプと対応するコンテナによって実装されていましたenum

明らかに、これは高速ですが、醜いので、コードをリファクタリングして、もう 1 つの typeで動作するようにする必要がある場合は、コードの古い部分を取り除き、 に置き換えたいと考えていboost::variantます。

また、単純に「両方のバリアントをプロファイリングして比較する」ことはできません。このリファクタリングは面倒で、かなりの時間がかかるためです。

boost::get<x>したがって、ジェネリック型ディスパッチと比較して がどのように機能するかを誰かが知っている場合enum-basedは、この知識を共有していただければ幸いです。

(ドキュメントboost::variant<types>で説明されているように) カスタム ビジターを使用する別の方法があります。これは私の場合よりも高速でしょうか?boost::variantboost::get

ありがとうございました。

0 投票する
2 に答える
2630 参照

string - VBscript で文字列配列をバリアント配列に変換するにはどうすればよいですか?

文字列のバリアント配列を返す vbscript の関数を使用しています。

問題は、vbscript が型付き変数を処理しないため、その配列からジョブ ID 値を取得できないことです。JobIDs 配列で何かをしようとすると、型の不一致が発生するだけです。ここでいくつかの有望な情報を見つけましたが、変換関数を使用すると:

同じタイプの不一致エラーが発生しています。ここで明らかな何かが欠けていますか?これはどうやらマイクロソフトの公式ソリューションであるため、同じ問題があるように見える理由がわかりません。つまり、そもそも文字列配列で実際に何もできないということです。私の質問の最初の部分が多くの場所で回答され、すべてが MS ソリューションを指しているのを見てきましたが、そのソリューションをうまく使用している誰かのフォローアップ レポートをまだ見ていません。

0 投票する
1 に答える
2588 参照

delphi - TStreamからのOlevariant変数に値を割り当てるにはどうすればよいですか?

Streamから読み取り、読み取ったバッファーをOleVariant(VarArray)変数に入れる必要があります。

TMemoryStreamからの読み取り値をolevariant変数に割り当てるにはどうすればよいですか?

私はdelphi5を使用しています。

0 投票する
4 に答える
3539 参照

delphi - 無効なバリアント型エラー Delphi 2010

iccDynamicObject.define() -> tmp := locate( _id); で DELPHI 2010 にブレークポイントを設定します。@ Project Project1.exe により、例外クラス EVariantBadVarTypeError が発生し、「無効なバリアント タイプ」というメッセージが表示されます。@

コードは DELPHI 7 でテストされており、この問題は発生しませんでした!

ps。コードは、問題を示すためにクラス内の型を使用せずに Delphi-7 スタイルで書き直されました...

解決済み ->などのクラス内ジェネリック型を使用しないでください

そのようなことは、デバッガーまたはコンパイラーを調達して、予期しないことを実行します!!! コードがコンパイルされ、正しく動作します。しかし、私の場合、ユニットの成長に伴ってコードが不安定になり、コードのリファクタリングを強要されます。ほんの少しですが、不便ではありません...

あなたは注目されています:)))

0 投票する
4 に答える
4575 参照

c++ - boost ::variantstd::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をフロートにするにはどうすればよいですか?

Variantにfloat値があります。最初、このバリアントはbstrタイプです。VariantChangeTypeを使用してfloatタイプに変更しています。それから私はそれからfloat値を取得し、それから私はバイトベクトル形式に変換しています。

バリアントにfloat値がある場合、これは正常に機能します。バリアントにINF値がある場合、VariantChangeTypeは失敗します。だから私はvariant.fltValから0を取得しています。

バリアントがINFまたはNAN値を持つ場合、タイプをフロートに変更するにはどうすればよいですか?floatでINFまたはNAN値を取得したい。

0 投票する
1 に答える
426 参照

boost - 関数オブジェクト内の内部呼び出し (Boost::apply_visitor 固有)

現在、set< T > および set< set< T > > を生成するセット式評価器を作成しています。以下のコードは、式の結果を表示するためのものです。

私が経験している問題は、セットコードを使用してセットのセットを評価しようとしたときに発生しています。明らかにこれを使用しているのは良い習慣ですが、コンパイラーは呼び出しを構築するために使用している構文を好まないようです。

そのような2つの行があり、それらはトレースを生成します..

e:\documents\level 3\advanced software engineering\coursework\coursework\boost\variant\detail\apply_visitor_unary.hpp(76): エラー C2039: 'apply_visitor': '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> _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> with 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> 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> 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\高度なソフトウェア工学\ coursework\coursework\context.cpp(337) : 1> [ 1> T=std::string 1> ] でコンパイルされているクラス テンプレートのインスタンス化 'Context::ExpressionTree::string_visitor' への参照を参照してください] 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\高度なソフトウェア工学\ coursework\coursework\context.cpp(337) : 1> [ 1> T=std::string 1> ] でコンパイルされているクラス テンプレートのインスタンス化 'Context::ExpressionTree::string_visitor' への参照を参照してください文字列 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> T=標準::文字列 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> T=標準::文字列 1> ]1> [ 1> T=std::string 1> ] でコンパイルされているクラス テンプレートのインスタンス化 'Context::ExpressionTree::string_visitor' への参照を参照してください。1> [ 1> T=std::string 1> ] でコンパイルされているクラス テンプレートのインスタンス化 'Context::ExpressionTree::string_visitor' への参照を参照してください。

その種の呼び出しを表現する方法を知っている人はいますか?

乾杯、アレックス