問題タブ [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.
com - コクラスの実装が ATL タイプ ライブラリで公開されないようにする方法
クラス ファクトリの型を使用して ATL タイプ ライブラリを構築しています。このようなもの:
その後、ユーザーは をINumber介してインターフェイスを実装するクラスのインスタンスを取得できますNumberFactory。
これはうまく機能しますが、メソッドから返される ATL オブジェクトを定義してインスタンス化する方法がわかりませんNumberFactory.GetNumber()。IDL で数値を次のように定義すると、次のようになります。
コクラスはOneユーザーがインスタンス化できます。Oneしかし、コクラスのインスタンスを取得できる唯一の方法は を呼び出すことだけに制限したいと思いますNumberFactory.GetNumber("One")。
だから私の質問は次のとおりです: ユーザーが をインスタンス化Oneできないように、IDL をどのように作成する必要がありますか?OneNumberFactoryINumberOne
さらに、これを機能させるために ATL 側で何か特別なことをしなければなりませんか?
visual-c++ - Vista で ActiveX をホストする際の問題 (Visual Studio 6 C++ アプリケーション) II
(ユーザー登録したので再投稿です)
Vista Enterprise マシンに Visual Studio 6 (SP5) をインストールしました。多少のトラブルはありますが、設定は問題ないと思います。
問題は、ActiveX をホストしようとすると、VC++ 6 アプリケーションが失敗することです。Vista から rc.exe に関する警告メッセージ (「このプログラムには既知の互換性の問題があります」) が表示されましたが、問題なくコンパイルできました。
デバッグすると、CAxDialogImpl から派生したクラスが Create() メソッドで失敗することがわかりました。同じアプリケーションが XP でも問題なく動作しました。
既知の互換性の問題はありますか?
技術情報: CAxDialogImpl::Create() (ここでは NULL を渡します) が AtlAxCreateDialogA を呼び出し、次に CreateDialogIndirectParamA を呼び出し、一般的な例外をスローすることがわかりました。
どうもありがとう、エリック
PS - 1. 私は自分のマシンの管理者です。OSは32ビットです。2. VS6 が Vista でサポートされていないことは知っていますが、VS 2008 に移行しようとして問題が発生したため、選択の余地がありませんでした。
atl - COMインターフェイスをパラメーターとして使用する際の問題
私は次の問題を抱えています:
Project1とProject2をプロジェクトする必要があります。Project1には、インターフェイスIMyInterfaceがあります。Project2には、 IMyInterface1へのポインターを受け取るメソッドを持つインターフェイスIMyInterface2があります。
import"Project1.idl"を使用する場合; 私のProject2.idlでは、#include"Project1.h"がProject2___i.hに表示されます。しかし、このファイルは存在しません!。他のライブラリに定義されているインターフェイスをidlファイルにインポートする適切な方法は何ですか?
#include"Project1.h"を#include"Project1_i.h"または#include"Project1_i.c"に置き換えようとしましたが、多くのエラーが発生しました。
また、 importlib( "Project1.tlb")を使用して、ライブラリ定義内でインターフェイスIMyInterface2を定義しようとしました。しかし、Project2PSプロジェクトをコンパイルすると、エラーが発生します(インターフェイスが定義されていない場合、dlldata.cのようなものは生成されません)。
ダミーのProject1.hを作成してみました。ただし、Project2 ___ i.hをコンパイルすると、コンパイラはMyInterface1を見つけることができません。そして、Project1 ___ i.hを含めると、再び多くのエラーが発生します。
どうやら簡単な問題ですが、どうすれば解決できるのかわかりません。私はそれに固執しています!
ちなみに、私はVS2008SP1を使用しています。
前もって感謝します。
.net - MS09-035脆弱性とアプリケーション開発への影響
これらのパッチhttp://www.microsoft.com/technet/security/bulletin/ms09-035.mspxおよびhttp://www.microsoft.com/technet/security/bulletin/ms09-034.mspxが「純粋な」(つまり、マネージC ++ではない).NET言語の1つを使用して構築されたソフトウェアに適用しますか?
これは純粋なATLの脆弱性のように思われるため、影響を受けないというのが答えだと思いますが、CLRでのATLの基本的な使用法について十分な知識がありません。
c++ - ATLセキュリティアップデートは、古いバージョンに応じてDLLの互換性を壊しました
最近のATLセキュリティ更新により、C++ランタイムがバージョン8.0.50727.4053に更新されました。残念ながら、この更新により、ランタイムに動的にリンクするDLLの1つが壊れました。これは、ターゲットマシンで使用できるのは8.0.50727.762のみであるためです(ATLも使用していません)。
Visual Studioに古いDLLに動的にリンクさせる方法はありますか?可能であれば、静的にリンクすることは避けたいと思います。
security - DelphiおよびMicrosoftATLのセキュリティ問題
私の印象では、標準のDelphiはWin32APIを使用しています。
最近、MicrosoftはATLに関する問題を伝えており、アプリケーション開発者は、マシンに更新プログラムをインストールした後、ATLを使用するアプリケーションを再構築する必要があります。この方法はDelphi開発者にとっても一般的なケースですか、それともサードパーティのATL COMオブジェクトを使用するDelphiコードを除いて明確ですか?
出典:
- Microsoftセキュリティ:アクティブテンプレートライブラリ(ATL)のセキュリティの脆弱性からコンピュータを保護します
- MSDN VC ++ DevCenter:開発者向けのアクティブテンプレートライブラリセキュリティアップデート
- Microsoftセキュリティアドバイザリ(973882):Microsoft Active Template Library(ATL)の脆弱性により、リモートでコードが実行される可能性があります
- Microsoft Security Bulletin MS09-034-重要:Internet Explorerの累積的なセキュリティ更新プログラム(972260)
- Microsoft Security Bulletin MS09-035-中程度:Visual Studio Active Template Libraryの脆弱性により、リモートでコードが実行される可能性があります(969706)
c++ - ATL dllをどこに配置すれば、それらが機能するようになりますか
同僚がIEプラグインを開発しました。これは、ATLを使用して作業を実行するために実行する必要があります。私はすべてのソースコードとコンパイルされたdll、そしてregeditを持っています。
reg editを実行し、dllをC:\ Windows \ System32ディレクトリに移動しました。このディレクトリにあるはずですが、機能していないようです。
正しく実行するには、dllをどこに置く必要がありますか?
また、プラグインが正しくインストールされているかどうかを確認する簡単な方法はありますか?
ありがとう
c++ - Atl71.dll への依存関係は、ATL への静的リンクが選択されていても存在します。
この問題のトラブルシューティングに丸一日費やしましたが、まだ運がありません。私のプロジェクトでは、[一般] プロパティ ページで [ATL の使用] プロパティを [ATL への静的リンク] に設定し、[コード生成] プロパティ ページ (C/C++ フォルダー) で [ランタイム ライブラリ]プロパティを[マルチスレッド (/MT) ] に設定します。ただし、DependencyWalker はまだ Atl71.dll 依存関係を示しています。
私はグーグルでこのページhttp://www.eggheadcafe.com/forumarchives/vcatl/Mar2006/post26077463.aspを見つけ、 atlbase.hの直後にatlwin.hを追加するソリューションを見つけました。このソリューションは、atl71.dll への依存を減らすのに役立ちました。ただし、CreateWindow が正しく機能しないという新しい問題が発生します。
hwnd は NULL です。
したがって、atlwin.h を追加するソリューションは使用できません。以前に同様の静的リンクの問題に遭遇した人がいるのだろうか? それを解決する方法は?
環境: VS 2003 .Net
ありがとう!
regex - 最大 4 文字に一致する正規表現の CAtlRegExp
短縮版:
CAtlRegExp を使用してa@a.aaaaに一致するが a@a.aaaaa には一致しない正規表現を取得するにはどうすればよいですか?
長いバージョン:
CAtlRegExp http://msdn.microsoft.com/en-us/library/k3zs4axe(VS.80).aspxを使用して、電子メール アドレスの照合を試みています。正規表現を使いたい
ここから抜粋。ただし、CAtlRegExp が受け入れる構文は、そこで使用されているものとは異なります。この正規表現はエラー REPARSE_ERROR_BRACKET_EXPECTED を返します。このアプリを使用して自分で確認できます: http://www.codeproject.com/KB/string/mfcregex.aspx
上記のアプリを使用して、この正規表現を作成しました:
しかし問題は、これが a@a.aaaaa に有効であると一致することです。op レベル ドメインの最大 4 文字に一致する必要があります。
では、 a@a.aaaa には一致するが a@a.aaaaa には一致しない正規表現を取得するにはどうすればよいでしょうか?
c# - COM 相互運用機能を使用した C++ から C# への BSTR のマーシャリング
C++ で記述されたアウトプロセス COM サーバーがあり、C# クライアント コードによって呼び出されます。サーバーのインターフェイスの 1 つのメソッドがクライアントに大きな BSTR を返します。これがメモリ リークの原因であると思われます。コードは機能しますが、BSTR のマーシャリングに関するヘルプを探しています。
少し単純化すると、サーバー メソッドの IDL は次のようになります。
実装は次のようになります。
A2BSTR は、SysAllocStringLen() を使用して BSTR を内部的に割り当てます。
C# クライアントでは、次のことを行うだけです。
これは、要求文字列が COM サーバーに送信され、正しい応答文字列が C# クライアントに返されるという点で機能します。しかし、サーバーへのラウンドトリップごとに、サーバープロセスでメモリ リークが発生します。crt リーク検出サポートは、crt ヒープに重大なリークを示していないため、リークが IMalloc で割り当てられたのではないかと疑っています。
私はここで何か悪いことをしていますか? 「すべての出力パラメーターは CoTaskMemAlloc で割り当てる必要があります。そうしないと、相互運用マーシャラーはそれらを解放しません」という漠然としたコメントを見つけましたが、詳細はありません。
アンディ