問題タブ [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 投票する
2 に答える
1383 参照

c++ - XLOPER と VARIANT の間でマーシャリングするにはどうすればよいですか?

COM オブジェクトと通信する Excel プラグイン (XLL) に取り組んでいます。そのため、XLOPER と VARIANT の間でマーシャリングを行う必要があります。私はこれのほとんどを機能させましたが、配列は間違いなく苦痛です。1 次元配列と 2 次元配列をサポートする必要があります。

誰かがすでにこれに対処しなければならなかったと思います。VARIANT、SAFEARRAY、および XLOPER (および XLOPER12) の処理を​​簡素化する最善の方法は何ですか?

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

c++ - boost::variant変換からタイプへ

私はブーストライブラリから次のバリアントを持っています:

valueここで、で''として宣言された変数から値を取得したいstruct nodeので、ジェネリックで作業して関数をそのように呼び出すことができると思いました:find_attribute<long>(attribute);しかし、コンパイラーは、バリアントからlongまたは他のタイプにキャストできないと言っています。私は何が間違っているのですか?

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

c++ - ブーストバリアントコンパレータ

タイプの2つの変数を比較する必要がありboost::variant、バリアント内の値が等しいかどうかを比較したいと思います。

これを実装するための最良の方法は何でしょうか?

私の変種は次のようになります:

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

php - PHPのCOMオブジェクトから返された多次元バリアント配列からどのように読み取りますか?

多次元VARIANT配列(vt_array)を返すCOMオブジェクトを使用していて、配列から値を読み取ろうとしています。

使用するprint_r($mdArray)と表示されますvariant Object。(variant_get_type($mdArray)戻ります8204。)

使用してみforeach ($mdArray as $oneArray)ましたが、次のメッセージが表示されます。

警告:Loader :: getfields()[loader.getfields]:C:\ Inetpub \ wwwroot \ root \ script \ fileloader.phpの135行目の単一次元バリアント配列(この配列には2つあります)のみを処理できます致命的なエラー:キャッチされない例外「例外」とメッセージ「バリアント型のオブジェクトはイテレータを作成しませんでした」C:\ Inetpub \ wwwroot \ root \ script \ fileloader.php:135スタックトレース:#0 C:\ Inetpub \ wwwroot \ root \ script \ fileloader .php(135):Loader :: getfields()#1 C:\ Inetpub \ wwwroot \ root \ testloader.php(21):Loader-> getfields()#2 {main}がC:\ Inetpub \wwwroot\にスローされます135行目のroot\script \ fileloader.php

(foreachループは135行目にあります)

配列について取得できる唯一の情報は、whichreturnsを使用するcount($mdArray)こと8です。

ここにいる誰かが多次元VARIANT配列からの読み取りの経験がある場合は、これを行う方法を教えてください。

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

visual-c++ - バリアント配列を VC++ から VB Com コンポーネントに渡す方法

VC++ クライアントから VB COM コンポーネント関数を呼び出していますが、

この関数は VARIANT 配列を想定しています。

HRESULT setLabels (/[in,out]/VARIANT * ラベル)

次の方法でバリアント配列を渡そうとしましたが、

この両方の方法で、VB コンポーネントは期待どおりに機能しません。私はVBコンポーネントのソースを持っていないので、内部で何が起こっているのかわかりません.VBクライアントからアクセスしているときに同じコンポーネントが正常に動作しています。

バリアント配列を VC++ から VB コンポーネントに渡す方法は?

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

c++ - boost::variant および void* ポインター

ユーザー定義クラスのインスタンスを保持するバリアント型が必要です。だから私はvoid *を使用します:

マップを使用してラッパー クラスを作成しました。

使用例:

バリアント クラスのこの void* には 2 つの問題があります。

  1. 動的に割り当てられたメモリへのポインターを含む属性のコピーは危険であり、エラーが発生しやすくなります。
  2. ユーザーは void* を MyClass* ではなく、WrongClass* に static_cast できます。コンパイルはしますが、結果は予測できません。

可能な解決策:

  1. boost::shared_ptr< void* > を使用します。
  2. 内のすべての void* 値 (それらが追加されたとき) の typeid を覚えておいてくださいstd::map<void*, typeid> typeid_map。ユーザーが void* 値を要求し、それを任意の TClass* にキャストしたら、アサーションを評価しましょう: assert(typeid_from_typeid_map == typeid(TClass*)).

質問:
1. ユーザー定義クラスの値を保持する他のソリューションはありますか?
2. 上記の問題に対するより良い解決策をお勧めし、他の問題を指摘していただけますか?

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

delphi - VarToDoubleAsString に Delphi 設定を使用させる(OS 設定ではない)

文字列値を含む Variant を浮動小数点変数に代入すると、Delphi は VarToDoubleAsString を呼び出して変換を行います。次に、OS の設定を使用して、10 進数と 1000 単位の区切り文字を (VarR8FromStr 経由で) 使用します。SysUtils.DecimalSeparatorとを変更する必要がある場合、これは問題ですSysUtils.ThousandSeparator。たとえば、次のプログラムを実行します。

最初のテストは問題なく動作しますが、2 番目のテストは失敗します。

Variant 変換SysUtils.DecimalSeparatorで and を使用する方法はありSysUtils.ThousandSeparatorますか?

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

java - バイナリチョップ:if list[middle]==キーケース

試験のアルゴリズムを改訂していて、この演習を解決しようとしていましたが、解決策を思い付くことができませんでした。

これは擬似コードです。

したがって、特定の入力(たとえば、x=1およびa={0,1,1,1,1})の場合、14行目で返される値が4行目の事後条件:演習では、次のように求めています。 。ヒント:何が変わらないかを述べるために含めるようにしてください。」

私は解決策を見つけることができませんでした。誰か助けてもらえますか?

よろしくお願いします、VJ

編集:わかりました、あなたの助けてくれてありがとう。

}真ん中を返す;

バリアントをミドルに選択しました。そして不変である:

0x

これは正しいと思いますか?

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

c++ - 特定のタイプを返すテンプレート

Tのタイプまたはバリアントのいずれかを返したいテンプレート関数があります。私は次のようにしようとしましたが、コンパイラは'variant'をintに変換できないと文句を言います(この関数をT = intで使用します)。

バリアントを返すか、バリアントに含まれるタイプを返すことができるように、これをどのように実装する必要がありますか。

これは、ベクトル構造体から取得されます。

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

python - VARIANT 型コードはどこにありますか? (vboxapi の問題)

私はvboxapiCOM を使用していますが、バグに気付きました...IMedium.CreateBaseStorage定義されているように呼び出すと、「無効なバリアント型: 20」というエラーが発生します。20 の値を 19 に変更しました。これは、他の (整数) パラメーターの VARIANT でした。

ただし、値はハードドライブのバイト単位のサイズであるため、これは機能しません。つまり、80、120、250 GBのハードドライブなどを作成する必要がある間、最大で4ギガバイトになる可能性があります.

では、8 バイト整数の VARIANT 型は何ですか? だと思いVT_I8ますが、数値は?今後の参考のために、どこでそれらを見つけることができますか?

値が20の場合、それは失敗している値であるため、私は失敗しています...その場合、他の誰かにアドバイスがありますか?