問題タブ [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++ - ATLシンプルオブジェクトウィザード-「オブジェクトXxxはすでに存在します」エラー
VisualStudio2005のATLSimpleObject Wizardを使用して、DLLに新しいCOMオブジェクトを作成しようとしています。
オブジェクトの短い名前を入力すると、他のすべてのフィールドが派生します。
ただし、ウィザードで[次へ]をクリックすると、次のエラーメッセージが表示されます。
ソリューション全体でIXxxInterfaceNameへのすべての参照を検索しましたが、どこにも定義されていません。
ウィザードは、それがすでに存在しているとどのように判断しますか?
shell - MSXML2::IXMLDOMDocumentPtr -> Release() が呼び出されると Internet Explorer がクラッシュする
Visual Studio 2008 を使用して、C++ (ATL 9) でシェル拡張機能を作成しています。シェル拡張機能は、モジュール クラスにグローバルな MSXML2::IXMLDOMDocumentPtr オブジェクト m_XmlDoc を作成します。この m_XmlDoc は、xml ドキュメントを読み取るためにすべてのクラスによって拡張機能で使用されます。
私が直面している問題は、Internet Explorer にあります。シェル拡張機能がアクティブなときに Internet Explorer を開いたり閉じたりすると、デバッグ ダイアログが表示されて IE がクラッシュします。エラー メッセージには、「iexplore.exe の 0x6aac30f1 で未処理の例外: 0xC0000005: アクセス違反の読み取り場所 0x03050970」と表示されます。メッセージ ウィンドウで [break] をクリックすると、COM Smart Pointer の [Release] メソッドに移動し、エラーは m_pInterface->Release(); にあるようです。
この呼び出しはモジュールのデストラクタから行われ、m_pInterface の値も NULL ではありません。Internet Explorer が XML DOM を使用していて、Release を呼び出すと何らかの問題が発生する可能性があると思います。
dllメインコード:
c++ - 管理されていない ATL GUI に Windows フォームを埋め込む方法は?
COM を表示できる Windows フォーム ユーザー コントロールがあります。次に、そのコントロールを ATL ダイアログ GUI に埋め込みたいと思います。
ATL プロジェクト (アンマネージ C++) は、winform の progID のみを取得し、実行時に動的に作成して埋め込む必要があります。
これは可能ですか?可能であれば、どうすればよいですか?
c++ - ATL でオブジェクトをプロパティとして返す
Visual Studio 2008 と ATL を使用して COM オブジェクトを作成しています。単純なプロパティとメソッドを追加するのは簡単ですが、もっと複雑なことをしたいと思っています。COM オブジェクトのプロパティを介して C++ オブジェクトにアクセスできるようにしたいので、次のようにします。
そのため、aProperty
というプロパティを公開する別のオブジェクトへの参照を返しますanotherProperty
。
2 番目のオブジェクトのプロジェクトに別の単純な ATL オブジェクトを追加し (それIClass2
を と呼びます)、IDL に次のようなものを含める必要があると推測しています。
私はここで正しい軌道に乗っていますか?この種の優れたチュートリアルを知っている人はいますか?
c++ - CBlobCache の使用法 - ATL サーバー ライブラリ
誰かがCBlobCacheの使用例を持っているかもしれません?
c++ - ATL ダイアログでホストされている Winform にテキストを入力できないのはなぜですか?
Winform コントロールを ATL ダイアログに埋め込む作業を行っています (これまでの方法については、こちらを参照してください)。
今、私はかなり奇妙な問題に遭遇しました。
何らかの理由で、winforms のテキスト フィールドは正常に表示されますが、キーボードで入力してテキストを変更できません。
ただし、他の場所からテキストをコピーしてテキスト フィールドに貼り付けると、通常の入力として扱われます (テキスト変更のイベントが発生するなど)。
テキスト フィールドを正常に動作させ、キーボードからテキストを入力できるようにするにはどうすればよいですか?
ヒントはありますか?
dll - DLL で WTL を使用するにはどうすればよいですか?
インプロセス COM サーバー DLL (IE BHO) 内で WTL を使用しようとしていますが、_Module に苦労しています。
私の DLL は次CMyModule
から派生する必要がありCAtlDllModuleT<>
ます。
しかし、これはほとんどの WTL の例と矛盾しますstdafx.h
。
どちらの方法でも、(当然のことながら) コンパイル エラーが発生します。borks onCMyModule
から派生などborks on codeから派生のような.CAppModule
_Module.DllUnregisterServer()
CMyModule
CAtlDllModuleT<>
_Module.GetMessageLoop()
WTL が DLL 内でどのように機能するかについての参考文献はありますか? Google は多くの質問を見つけますが、答えはほとんどありません。
c# - SAFEARRAY を Interop で動作させることができない
インターフェイスのメソッドが存在する ATL COM サーバーがあります。
この関数の MIDL は次のようになります。
tlbimp を使用してこのプロジェクトから tlb をインポートするので、ネイティブ配列を使用できます。次に、次のようにC#から呼び出します
ここで、Inputs は既に割り当てられており、C# プログラム内から別の COM オブジェクトで埋められています。ここで、C++ ラッパーをBadPtr
呼び出すと、セーフ配列があり、配列から後続の COM オブジェクトへの呼び出しがCWrapper::RUN
失敗し、配列が最終的な dll に到達しません。未割り当てと表示されます。誰かが私が間違っていることについて何か手がかりを持っていますか? ありがとう
編集:配列はC#で問題なく見えると述べるべきでした。
EDIT2: デバッガーは のiData
safearray を示していますIDispatch* = 0x0000000 <Bad Ptr>, 5, 0x0000000 <Bad Ptr>({lpvtbl = 0xblahblah},...
。それで、私の情報の一部がそこに届いているようです。
c++ - ATL:クラスのメソッドのパラメーターとして使用できるコクラスを作成したいと思います。なぜこれを機能させることができないのですか?
ATLを使用してCOMオブジェクトを作成しました。メソッドから返され、パラメーターとして渡される新しいオブジェクトを作成したいと思います。コクラスを作成しましたが、それをパラメーターとして受け入れるメソッドを追加する方法がわかりません。
私が得ているエラーはMIDL2025です:構文エラー:「IgBrush」の近くの型指定を期待しています。VisualStudio2008を使用しています。
列挙型を追加したとき、IDLをかなりいじってみたのを思い出し、最終的には列挙型をパラメーターとして受け入れるようになりました。コクラスにはそのような運はありません。
ATLウィザードが提供するデフォルトで生成されたコードから、これを機能させるために必要な手順は何ですか?(つまり、何をどこに、なぜ移動するのですか?)