問題タブ [atl]
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++ - COM エラー 0x80004003 (無効なポインター) MS Outlook の連絡先にアクセスする
私はスマート COM ポインターを使用して MS Outlook の連絡先を反復処理する ATL コードで、一部の PC では連絡先ごとに COM エラー 0x80004003 (「無効なポインター」) が発生します。同じコードは、他の PC でも正常に動作します。コードは次のようになります。
他のアプリケーション/アドインがこれを引き起こしているのだろうか? どんな助けでも大歓迎です。
c# - c#.net の BSTR の SAFEARRAY として parray を含む COM [out] VARIANT* を解決します。
質問: IDL としてのメソッドを持つ COM サーバーがあります。
ヘッダー ファイルでは、次のようになります。
実装:
//全体像を完成させるために、CInternals クラスがここに追加されます
int CInternals::CollectDeviceStrings(CComVariant* pList) { HRESULT hr = S_OK; BOOL bRet = FALSE; HRESULT hres = S_OK;
}
C# の CS ファイルで
ポイントは、「out oResult」オブジェクトはどれも機能しないということです。
どんなアドバイスでも大歓迎です。
c++ - 「登録されていないクラス」どのクラス?
このコードを考えてみましょう:
つまり、オブジェクトをインスタンス化するコードのブロックがあります。一部のクラスが正しく登録されていないために失敗することがあります(インストールが正しくありません)。(特に問題はありませんが、ここで一般的な議論をします。)
キャッチされた例外などから、どのクラスが失敗したかを認識する方法はありますか?gLastCreateAttemptUuidのような変数を格納する独自のラッパーを作成することを考えましたが、面倒です。
また、SomeClassが、登録されていない他の何かをインスタンス化しようとしているとします。次に、根本的な問題を理解できますか?
c++ - ATL 接続ポイントを機能させることができません
ATL を使用して COM コンポーネントを作成しようとしており、VB クライアントのイベントを発生させたいと考えています。多数のチュートリアルを見つけましたが、それらはすべて詳細が異なるようであり、実用的なソリューションを生成するものはありません。これが私がやっていることです:
(Visual Studio 2008 を使用):
- 新しい ATL DLL プロジェクトを作成します。私はそれを呼んだ
ATLEventTest。 - クラス ビュー: を右クリックし
ATLEventTest、新しい ATL シンプル オブジェクト クラスを追加しました。これを と呼び、 、 などMyObjectを生成しました...CMyObjectIMyObject このオブジェクトは以下で作成されました: a) アパートメント スレッディング b) アグリゲーション c) デュアル インターフェイス d) ISupportErrorInfo e) 接続ポイント
を右クリックし
CProxy_IMyObjectEvents<T>、「関数の追加」をクリックしました- 関数の戻り値の型は void で、名前
someEventは で、引数はint testParam. - 再構築します。
(この時点で、どこかに「Implement Connection Point」が表示されるはずです。表示されません...) - を右クリックしました
CMyObject。「接続ポイントを追加」 _IMyObjectEvents' ' をリストに移動しました。- 私のソリューションでコード検索を行いました。
someEventどこにも見つからない! someEvent機能を再度追加しました。現在は、ATLEventTest_i.h にあります。fire_someEvent(...)私のコードを呼び出すことができるはずですが、できません。
これは、これを機能させようとして私を狂気に駆り立てています。誰かが私が間違っていることを見ることができれば、修正、ヒント、ハックなどをいただければ幸いです。
この時点で、私はウィザードを台無しにして、c++ と idl を直接変更しようとしているだけだと言いたくなりますが、それはそれほど良いことではないかもしれないと感じています :(
c++ - SetThreadLocale と UTF8
したがって、SetThreadLocale を使用して、スレッドのコードページを UTF8 に設定したいと考えています。これまでは、「CT2A(szBUF, CP_UTF8)」などの atl 文字列変換マクロの 2 番目のパラメーターを使用してこれを行ってきました。しかし、最初に SetThreadLocale() を使用してスレッドのコードページを一度設定できるようにし、変換マクロの 2 番目のパラメーターを再度使用する必要がないようにしたいと考えています。
どうすればいいですか?SetThreadLocale は、CP_UTF8 のようなコード ページ パラメーターを使用せず、LCID のみを受け取ります。これを実現するには、どのパラメータを SetThreadLocale に供給する必要がありますか??
心に留めておいてください、私は特定の言語を念頭に置いていません。得られる文字列は、日本語、韓国語、英語などです。これまでのところ、変換マクロの 2 番目のパラメーターとして CP_UTF8 を指定する場合、この文字列の混合に問題はありません。「では、なぜ 2 番目のパラメーターを使用し続けないのか」と疑問に思うかもしれません。「コードに取り組んでいるチーム メンバーが簡単に忘れてしまう可能性があるためです。デフォルトの 1 パラメータ バージョンの変換マクロを使用して正しく動作するようになればよいのですが」と答えてください。
c++ - CComPtrオブジェクトの誤った使用によるコンパイルエラー
CComPtrクラスで次のオブジェクトとメソッドを定義しました。
私のクラスのコンストラクターではmRawPdu、初期化子リストを介して0に初期化します。このgetRawPdu()方法でmRawPduは、まだ初期化されていない場合に遅延評価を使用しました。
コードをコンパイルすると、次のエラーが発生します。
これを引き起こしている可能性があるものについての提案はありますか?
com - エラー文字列とエラーコードの両方をATLActiveXコントロールからVB6に返すにはどうすればよいですか?
CComCoClass :: Errorを使用して詳細なエラーをVB6に返そうとしていますが、エラーコード/またはメッセージのみを返すことができるようですが、両方を返すことはできません。
その結果、VB6側のErr.Descriptionに一般的な「オブジェクト'IMyInterface'のメソッド'Request'が失敗しました」というエラーメッセージが表示されます(ただし、Err.NumberではERROR_CONNECTION_INVALID)。
適切なエラーメッセージが表示されますが、Err.Numberの一般的なエラーコードが表示されます。どうすれば両方の世界を最大限に活用できますか?
com - COM MFC ATL は勉強する価値がありますか?
COM MFC ATL WTL を今勉強する価値はありますか?
c++ - CA2Wで「'AtlThrowLastWin32':識別子が見つかりません」というエラーが発生しました
Visual Studio 2005でCA2Wを使用してbig5文字列をUnicode文字列に変換するために、 MSDNドキュメントに従ったときに、奇妙なコンパイルエラーが発生しました。
これは私が書いたコードです:
コンパイルエラー:エラーC3861:'AtlThrowLastWin32':識別子が見つかりません
これがどのように起こるのかわかりません。AtlThrowLastWin32のドキュメントには、atldef.hが必要であることが示されていますが、atldef.hでAtlThrowLastWin32の宣言が見つかりませんでした。