問題タブ [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.
c++ - char* から作成された _bstr_t を解放する
char* 配列があり、メモリを動的に割り当てています。
この char* は、以下のように _bstr_t に渡します。
bstrData を介して char* に割り当てられたメモリを解放する方法は?
c# - C#で.NET SecureStringから単一の文字を読み取る?
WPFのPasswordBoxは、パスワードをスヌーパーから隠すSecureStringを返します。
問題は、最終的にパスワードの値を取得する必要があることです。ネット上で私が見つけた提案はすべて、値を文字列にコピーすることで、スヌーパーの問題に戻ります。
しかし、実際に考えてみると、文字列としての値は実際には必要ありません。つまり、パスワードで何をしますか?それをハッシュしてから、結果を保存されたハッシュと比較し、それらが同じであるかどうかを確認します。
つまり、SecureStringを文字列に変換する必要はなく、文字列内の個々の文字を反復処理できる必要があります。
しかし、どのように?
管理された文字列に変換せずに、C#でBSTRの個々の文字をループするにはどうすればよいですか?
編集:リンクが消えた場合の解決策:
Marshallクラスは、指定されたオフセットでIntPtrから個々のバイトまたはintを抽出できるメソッドを提供します。BSTRオブジェクトには、2つのヌルバイトで終了する16ビット文字の配列が含まれています。したがって、ループすることでそれらにアクセスできます。
(私はそのフロー制御を気にしません。ダミー値をbに事前入力するのではなく、do ... whileを使用したか、内部ブレークを使用してfor(;;)ループを使用しました。または、長さをループしていると思います。これについては、以下で説明します。)
また、私はおそらく使用します:
それぞれの下位バイトだけでなく、Unicode文字全体を読み取ります。
BSTRの長さは、次の方法で取得できます。
これは、文字数ではなく、ヌルを含まないバイト数です。
また-使用:
visual-c++ - CComBSTR メモリ管理
以下のシナリオで CComBSTR を使用しています。
タイマーは 5 秒間隔ごとに実行されます。
上記の場合、メモリは 5 秒ごとに増加しています。私の理解によると、CComBSTR は範囲外になるとメモリをクリーンアップします。したがって、タイマーが終了するたびに、割り当てられたメモリを解放する必要があります。しかし、そうではありません。
CCOMBSTR の使用時にメモリが解放されるタイミングを理解する必要があります。
c++ - _bstr_tを使用する場合のnullポインタが無効です
開発中のCOMDLLがあり、いくつかの問題が発生しています。コードのブロックをキャッチしてみましたが、キャッチで_bstr_t
例外から取得しました。私がやりたかったのは、その例外をキャッチして文字列に出力することでしたが、その例外がスローされると、無効なnullポインターエラーがスローされます。ヌルポインタをチェックする方法についてMSDNを調べてみましたが、機能していないようです。これはクライアントマシン上にあり、情報を出力しようとするとこのエラーが発生するため、実際にはエラーをデバッグできません。
c++ - 最短の文字列型変換 C++ を探しています
C# マネージ DLL を使用するアンマネージ C++ DLL を作成しています。C++ ライブラリをアドオンとして追加できるソフトウェアで定義された関数とヘッダーを使用する必要があるため、C++ ライブラリを作成しています。しかし、私が作りたいものは非常に複雑で、C++ に関する知識が乏しいため、作業が遅くなるので、お気に入りの C# で作成し、DLL を COM 経由で接続することにしました。成功しました。
私は何とかコードを機能させることに成功していますが、明らかにプロの C++ プログラマーではないため、コードを簡潔に保つことにはあまり成功していません。
問題は、さまざまな文字列型の変換にあります。BSTR と const char * 特に。
次のコードは、const char * を BSTR に変換します。
問題は、対応する離散インターフェイス メソッドを持つ離散 someChars がたくさんあることです...プロパティ メソッドは C# インターフェイスから生成されるため、変更できません。それぞれの "someChar" には次の 3 行のコードが必要なので、30 個の離散変数の場合、90 行のコードを記述する必要があります。
問題は、1 行に収まるようにショートカットを作成するにはどうすればよいかということです。
「ゲッター」関数ポインターと someChar ポインターを使用して、ある種の関数を試しました。
しかし、コンパイラは、バインドされた関数とそれらがポインターとして許可されていない方法についていくつかの奇妙なことを言います...私はそれが何を意味し、与えられた解決策は関数定義を変更するために必要でしたが、定義が生成されているのでそれを行うことはできませんC# コードから (regasm.exe による)。
重要な注意:最後に const char * 型を取得する必要があります。これは、C++ DLL を作成しているプログラムの関数に必要な入力型であるためです。
string - BSTR と文字列
または、BSTR を入力パラメーターとして TCHAR * を API に渡しても問題ありません。
return ステートメントを使用して wchar_t 文字列を BSTR に変換しても問題ありませんか? メモリが破損する可能性はありますか?
string - Visual C++ BSTR をファイルに書き込む
私はC++の初心者です。BSTR を CSV ファイルに書き込もうとしていますが、wcout で印刷したときのデータが、ファイルにあるデータと一致しません。
- tempString = L"TestData" の場合 -> ファイルで同じ値を確認できます。
- If tempString = getData(); 関数が BSTR を返す場合、ファイルに同じ値が表示されません。
これを明確にしてもらえますか?また、BSTRをファイルに書き込む方法を正確に説明してください。
編集:コードを追加
c++ - LPCSTRにBSTRを追加する
BSTRを受信するクラス関数があります。私のクラスには、LPCSTRであるメンバー変数があります。次に、BSTRinsLPCSTRを追加する必要があります。どうすればそれができますか。これが私の機能です。
私のm_classMemberでは、この関数の後の値を「Name:text_received_in_function」にする必要があります。どうすればそれができますか。
c++ - _bstr_t メモリ リーク
私はC++コードを持っています。しかし、メモリを適切に解放していません。どこが間違っているか教えてください。ここに私のコードがあります
GetXML (5 行目) は BSTR を返します。これでプログラムのメモリが増えます。しかし、SysFreeString (7 行目) の後、メモリは解放されません。ここで何が間違っていますか?
c++ - C++でタイプBSTRの変数を削除する方法
以下のコードは、鉱山の構造と構造参照を含むクラスです。
上記のコードをコンパイルすると、DeleteMessageQueue関数で次のエラーが発生します
エラーC2451:タイプ'_bstr_t'の条件式は不正ですエラーC2228:'.Detach'の左側にはクラス/構造体/共用体が必要です