問題タブ [atlcom]

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 に答える
2426 参照

visual-studio-2008 - VS 2008 でのプロキシ/スタブ dll の構築

ATL COM プロジェクトを VC6 から VS 2008 に移行しました。VS2008 で PS DLL をビルドするにはどうすればよいですか?

VS 2008 の新しい ATL プロジェクトには、PS DLL をビルドする別の PS プロジェクトがあります。しかし、VC6 からの移行では、このプロジェクトは作成されませんでした。

PS mk ファイルで nmake を呼び出そうとしましたが、ソース ファイルと自動的に含まれる Windows ヘッダー ファイルの両方に存在する列挙型の再定義エラーが発生します。WIN32_LEAN_AND_MEANソリューションでは、不要なヘッダー ファイルを除外するプリプロセッサを定義することで、これを修正しました。nmake を使用しているときに同じことができますか?

PS DLL を作成する他の方法はありますか?

0 投票する
3 に答える
1143 参照

interface - COMオブジェクトをCOMインターフェイスにdynamic_castしても、参照カウントは増加しませんね。

COMインターフェイスIYおよびIZを実装するC++クラスXがあり、タイプXのオブジェクトのIYインターフェイスへのポインタyがある場合、次のようにします。

それはオブジェクトの参照カウントを上げませんね?それを説明するためにRelease()を実行する必要はありませんよね?

重要な場合は、ATL/COMを使用しています。

答えは「参照数を増やすことはなく、Release()をする必要もない」と推測していますが、確認したいと思います。

前もって感謝します。

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

interface - ATL / COM:DLLの外部では使用できないCOMインターフェイスを定義していますか?

VC++6.0を使用して作成されたATL/COMベースのDLLがあります。これは、VB6を使用して構築されたさまざまな実行可能ファイルに使用されます。

DLLの内部使用のみを目的として、VB6経由でアクセスできないCOMインターフェイスをいくつか追加したいと思います。(使用時に)COMインターフェイス参照しかないオブジェクトで使用するため、C++インターフェイスではなくCOMインターフェイスにします。

つまり、このポインタがCFooを指していることを(使用時に)知りません。私はそれがIFooを指していることを知っています。IFooはCOMインターフェイスであり、VB6がそれを認識できるように公開されています。このIFooポインターから、IFooを実装するすべてのクラス(CFooだけでなく)が実装するIFooInternalポインターを取得したいと思います。さらに、DLL自体の外部からIFooInternalにアクセスできるようにしたくありません。たとえば、VB6からIFooInternalにアクセスできるようにしたくありません。

これに関する助けをいただければ幸いです。同じ全体的な目標を達成するための代替方法の提案もあります。前もって感謝します。

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

windows-mobile - Windows モバイル 7.0 での ATL WebBrowser コントロールのサポート

興味深いことに、ATL Web ブラウザー コントロール (IWebBrowser2) のサポートが次の Windows Mobile 7.0 バージョンで利用可能になることを知りたいと思います。

誰でも同じことを確認できますか。

ありがとう、ラマナンド

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

c++ - ATLComTime.hは、再配布可能なものの一部ですか?

他の誰かが書いたコードベースに機能を追加しました。VS2005で「ATLを使用していません」フラグが設定されていたとき#include <ATLComTime.h>に、ファイルの1つにあることがわかりました。再配布可能なC-Runtimeライブラリ(ここを参照)のみを送信しました。クライアントは、自分のマシンで動作するコードを取得できません。「DLLエントリポイントが見つかりません」というエラーが表示されます。すべてのテストマシンにインストールできたので、ターゲットマシンにDLLまたはライブラリがないようなものだと思います。

彼らは私がクライアントに「偽の」再配布可能なものを送らないように私に望んでいます。最終的にこのヘッダーがどの再配布可能に関係するかを見つけることができないように思われるので、私はここで尋ねています。私は途方に暮れています。助けられる?

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

visual-studio - 新しいバージョンの Visual Studio を使用して "古い" ことを行うことはできますか?

Visual C++ 6.0 を使用している ATL/COM ベースの DLL がいくつかあります。生成された DLL から「古い」ものがいくつか必要です。

(1) それらは、Visual Basic 6.0 (古い VB6、特に VB.Net ではありません) で開発されたプロジェクトと互換性がある必要があります。

(2) 古いオペレーティング システム (Windows 98 SE 以上) と互換性がある必要があります。明確にするために、それらはそのような OS で実行する必要があるという意味であり、そのような OS を実行するマシンでそれらを開発できなければならないという意味ではありません。

Visual Studio 6.0 にはうんざりしています。Dot Net への変換 (またはそのような大きな変更) は、現時点では問題外であるため、VB6 を引き続き使用する必要があります。しかし、最小限の労力で (つまり、必要な再コーディングがほとんどない場合)、新しい Visual Studio の C++ に切り替えることはできますか?

もしそうなら、気をつけるべき「落とし穴」はありますか?

ありがとう。

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

c++ - C++ベースのオブジェクトモデルをCOMインターフェイスでラップするための簡単なメソッドは何ですか

アプリケーションのビジネスレイヤー層を表す既存のc++オブジェクトモデルがあります。オブジェクトモデルを他の言語(vbscript、VB、javascriptなど)で記述されたアプリケーションに公開できるようにしたいのです。これを行う最良の方法は、ビジネスオブジェクトをCOMレイヤーでラップすることだと思います。

これを行うには、どのような高速で効果的な方法がありますか。アドバイス、実用的な「ハウツー」ドキュメントへのリンクをいただければ幸いです。

私はこれで賞金稼ぎを始めているので、潜在的な賞金稼ぎのためのいくつかの追加のガイドラインがあります:1)私はATLアプローチを決定しました2)私は今本当に良い「方法と迅速さ」へのリンクを特に探しています既存のc++オブジェクトモデルをラップして、javascriptなどのスクリプト言語で使用できるようにするためのドキュメント3)cpp、idl、hpp /など、どのファイルにどのコードを追加する必要があるかを示す小さな作業例のあるものhなど。理解を深めるためにテストと変更をコンパイルできる例を含める必要があります。

補遺.....さらなる文脈。私にとって、これは約10年後のCOMへの再訪問です。私は2000年より前の3年間、MFCとATL COMを実行しました。COMとは何か、C ++での実装に使用される原則、スレッドモデルなどを理解しています。重要な原則、それ以上にガイド付きの再学習体験になります。

もっと時間があれば、Troelsenによる「COMとATL 3.0の開発者向けワークショップ」を掘り下げたいと思います。これは非常に優れた本ですが、非常に遅いキック(再)開始です。

コメントに続くさらなるコンテキスト..........。

可能な限りシンプルに保つ、シングルスレッドアパートメントモデルとインプロセスdll。

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

com - 構造体の配列 (std:string または BSTR を含む) を ATL から C# に渡す方法を教えてください。セーフアレイ? 変異体?

C# から使用している ATL COM オブジェクトがあります。インターフェースは現在次のようになっています。

つまり、非常にシンプルなインターフェースです。また、送り返すイベントもいくつかあります。ここで、インターフェイスに何かを追加したいと思います。ATL には、現在構造体であり、次のように見えるいくつかの結果があります。文字列 ID; 文字列の要約; }; 構造体のすべてのメンバーは std::string です。C# に戻す必要があるこれらの配列があります。これを行う最善の方法は何ですか?

誰かがこう言うだろうと思います、「おい、std::string をそのように COM 経由で送信することはできない。もしそうなら、それでいいが、構造体を変更する最良の方法は何だ? std::string を BSTR に変更する?」 1) 構造体の配列 (BSTR または std::string を含む構造体) を渡すように IDL を設定します。2) SAFEARRAYS を使用する必要がある場合、SAFEARRAYS を構造体で埋める方法。

単純な型での使用を除いて、COM には詳しくありません。

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

visual-c++ - MFC アプリはどのように仮想メモリにコミットしていますか?

私は、最大 160 MB の仮想メモリに自動的にコミットしているように見える MFC アプリに取り組んでいます。アプリは通常、10 ~ 14 MB のメモリ使用量で実行されるため、このレベルのコミットされたメモリは過剰に見えます。さらに、VirtualAlloc が呼び出されるコード内の場所はありません... COM と ATL も使用されています。

メモリーは、__tmainCRTStartup のブレークポイントに到達する前に、プロセスが起動するインスタンスをコミット済みとして示します。

このメモリはどのように予約/コミットできますか?

前もって感謝します!

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

c# - C# で ATL dll ファイルからメソッドにアクセスする

私はいくつかの C++ コードをリンクし、それを COM オブジェクト内にラップして C# 経由でアクセスしようとしてきました。atl プロジェクトを作成し、Add(double a, double b) などの単純なメソッドを追加しました。以下は、私の atl.h ファイルのコードです。

以下は、atl.cpp ファイルからのものです。

私のC#ファイル内で、dllを呼び出しています...参照した後... dllは表示されますが、割り当てられたメソッドは表示されません。これは私の問題です。Program.cs のコードは次のとおりです。

Add(2, 3); でデバッグが中断します。「DLL 'com.dll' に 'Add' という名前のエントリ ポイントが見つかりません」と表示されます。何か案は?