問題タブ [bstr]
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.
visual-c++ - _bstr_t::wchar_t*、_bstr_t::char* 演算子から返された文字列を所有するのは誰ですか?
_bstr_t::wchar_t*, _bstr_t::char*
演算子は、さまざまなタイプの文字列を返します。
delete
またはそれらをする必要がありfree
ますか?どの機能を使用していますか?
string - CComBSTR が特定のプレフィックスで始まるかどうかを確認する方法は?
特定の CComBSTR オブジェクト (のようなものY.StartsWith("X")
) でプレフィックス チェックを実行する必要があるコードに遭遇しました。C++ は私にとって少しなじみがなく、私の最大の関心事は効率です。CComBSTR を変更する必要はまったくありません。私が望むのは、Xプレフィックスで始まるかどうかについてブール値を返すことだけです。
CComBSTR Membersの下の API にリストされている演算子を見ると、==、>、< などの非常に基本的な比較が可能です。これを解決する方法について 2 つのアイデアがあります (以下にリスト)。ただし、これを行うための最も効率的/最も簡単な方法について、私は深く理解していません。私が完全にベースから外れている場合は、お知らせください。
- BSRTToArrayを使用して配列を作成し、最初の n 個のインデックスを反復処理して、特定のプレフィックスがあるかどうかを確認します。
- CComBSTR から BSTR を取得し、BSTR でいくつかの比較を行います (これを行う方法はまだわかっていません)。
c++ - OPOS BSTR* が正しく変換されない
そのため、一連の調査の結果、WideCharToMultiByte を使用すると、コントロール オブジェクトから OPOS を介してカスタム SO にデータを送信するのに効果的であることがわかりました。さて、バグに遭遇しました。DirectIO 部分では、C# コントロール オブジェクトのマップは DirectIO(int command, ref int data, ref string object); です。
そして、長い間、DirectIO を介して単純なコマンドを送信するだけで済みました。たとえば、LED をオンにするには、データをミリ秒単位の長さに設定し、オブジェクトを色に設定します。タグやカードにデータを書き込む必要がある場合、テキストを特殊な XML スタイルの文字列からバイト配列に解析する必要がありました...さて、バイト配列が必要になり、ASCII エンコーディングを使用する必要が生じました。その配列を文字列形式に入れ、それを書き込みます..
サービス オブジェクトでこの文字列を変換すると、正しく変換されないという問題が発生します。SysStringLen は長さが 4 バイトであることを認識していますが、null で停止しているようです。例 コントロール オブジェクトはこれを行います
SOはこれを見る
の出力が得られます
dataObject(4)-19:00:00:00
基本的に、最初のヌル文字に到達するとすぐに、残りのデータは失われます。数値を文字列から文字列に変換すると、その時だけの ByteUtil 関数があるため、問題なく動作します...しかし、そうしなければならないのは適切ではないようです...なぜできないのですか私はそれをBYTE配列として持っていますか?
arrays - 文字列の配列を COM オブジェクトに渡す
次の方法に適合するデータ型を見つけることで諦めました:
- 「BSTR文字列のベクトル」を必要とするCOMオブジェクトメソッドがあります(COMのドキュメントにあるように)。
それはから完全に動作します: a) python (すべては python BTW から動作します)
b) VBS:
c) しかし、VB では何もできません ('CComBaseContainer::GetMultipleAttributes failed' エラーが発生します)
Out=Visum.Net.Zones.GetmultipleAttributes(In)
同じエラーが発生するたびに、次のデータ型でそのような方法を試しました:
どうすればこの方法を満たすことができますか?
PS。ドキュメントからの引用:
GetMultipleAttributes ( [in] VARIANT AttrIDs, [out, retval] VARIANT *value)
コンテナーのすべてのネット オブジェクトのいくつかの属性の値を返します。属性 ID は、BSTR 文字列のベクトルとして指定する必要があります。戻り値には、すべてのオブジェクトの値と指定された属性で構成される VARIANT 値のマトリックスが含まれます。マトリックスの行は、標準的な順序 (キー順) のネット オブジェクトに対応します。列は、指定された順序で属性に対応します。パラメータ [in] VARIANT AttrIDs ATTRIBUTE.XLS のような属性 ID のベクトル。[out, retval] VARIANT *value コンテナー内のすべてのネット オブジェクトのこれらの属性の値のマトリックス
前もってありがとうi2
c++ - 文字列を使用する代わりにc++_bstr_t
ファイルを読み取るためのコードがいくつかありますが、std :: stringを使用しています。_bstr_tを使用する必要があり、次のコードは正常に機能します。タイプを変更する方法は?
c++ - COMのBSTRタイプを値または参照として扱いますか?
本ATLIternalsから、BSTRはOLECHAR *とは異なり、BSTRにはCComBSTRとCStringがあることがわかりました。
BSTRのメモリの割り当てと解放のMSDNによると、呼び出し元/呼び出し先のメモリ管理の責任を知っていました。
MSDNからこの行を取得します。
HRESULT CMyWebBrowser::put_StatusText(BSTR bstr)
私はまだbstr
私の実装で適切に処理する方法を知りません。BSTRについてはまだ基本的な質問があるのでbstr
、少なくともCOMインターフェイスの境界では、値(intなど)または参照(int *など)として扱う必要があります。
実装でBSTRをできるだけ早くCString/CComBSTRに変換したいと思います。値または参照セマンティクスは、変換の場合とはまったく異なります。私はCComBSTR.Attach、CComBSTR.AssignBSTRなどを掘り下げました。しかし、コードは私の疑問を解決することはできません。
MSDN CComBSTR.Attachにはコードの一部がありますが、BSTRのメモリの割り当てと解放に従わないため、間違っていると思います。ATL Internalsによると、SetSysStringは「渡された元のBSTRを解放します」。これを使用すると、CComBSTR.Attachと同様に、BSTR引数の規則に違反します。
全体として、実装で生のBSTRを処理するためにCStringを使用したいのですが、正しい方法がわかりません...プロジェクトでいくつかの作業コードを記述しましたが、私は正しいです。
コーディング言語について話させてください
windows - QString を BSTR に、またはその逆に変換する
に、またはその逆に変換QString
したい。BSTR
これは私が変換しようとしているものQString
ですBSTR
:
そしてに変換BSTR
するQString
:
これは正しいです?つまり、データの損失はありますか? はいの場合、正しい解決策は何ですか?
c++ - CComBSTR と NULL の比較
最近、私はコードに取り組んでいて、次のコードを見つけました:
NULL
直感的ではないオブジェクトを比較しているので、最後の行は私に警告します。しかし、MSDN を見てみると、完全にサポートされています。
私の質問は、API 設計でCComBSTR
このような比較が可能になるのはなぜですか? エラーにもっと寛容になるためですか?
com - BSTR を float に変換する際の問題
BSTR を float に変換しようとしています:
問題は、 data = 239.78 の場合、この関数が正常に機能することですが、この形式data = 239,78で受信します。
このコードの出力は 239 です。
誰でも助けることができますか?ありがとうございました。