ActiveX コントロールを Excel ワークシートで直接使用するために必要かつ十分な要件は何ですか?



Microsoft Office サポート記事「ActiveX コントロールの追加または登録」には、次のように記載されています。



ただし、必要な要件がどこにも文書化されていません。 十分 コントロールをワークシートで直接使用するため。


新しい C++/ATL プロジェクトを作成し、そこに ATL コントロールを追加して、全体でデフォルトを受け入れました。コントロールをコンパイル、ビルド、登録すると、Excel の [その他のコントロール] リスト ([開発者]> [挿入]> [ActiveX コントロール]> [その他のコントロール...] でアクセス) に表示されますが、ワークシートに挿入しようとすると、「オブジェクトを挿入できません」というメッセージが表示されます。 " エラー。


これを修正するには、どのような変更を加える必要がありますか?


または


ActiveX コントロールに関する Excel の要件はどこに記載されていますか?



参考までに、ウィザードによって生成されたコントロールが正常に動作することを確認しました (Visual C++ 2008 サンプル パックから作成した ActiveX コントロール テスト コンテナーでテストしました)。


さらに、ATL コントロール ウィザードの [外観] タブのドキュメントで、[挿入可能] チェックボックスが次のように説明されていることも承知しています。



ただし、このチェックボックス (「挿入可能」サブキーをレジストリに追加するだけ) は、コントロールを [挿入]> [テキスト]> [オブジェクト] ダイアログに表示するだけです。どちらの方法でも同じエラーが発生します。


現在、コントロールを挿入しようとしたときの Excel の実行パスのトレースと、動作中の (Forms 2.0) コントロールを挿入しようとしたときのトレースを比較しています。主な違いは、タイプ ライブラリをロードする際の VBE7.dll にあるようです (OLE/COM オブジェクト ビューアーは DLL から正しくロードできますが、Excel が同じ読み取りをすべて実行した後、EXD を書き出す前に中断します)。 )...私はそれを理解することを無駄に期待して、今いくつかのアセンブリを掘り下げています—しかし、確かに 誰か Excel 用の作業用コントロールを作成し、何が不足しているのかを知っている人が、この苦痛を免れることができるでしょうか?!




Microsoft Windows 10 Pro v1511 (10.0.10586.164) 64 ビット

Microsoft Excel 2016 MSO (16.0.4312.1000) 64 ビット

Microsoft Visual Studio コミュニティ 2015 (14.0.24720.00 アップデート 1)


いくつかのコードの回答


CSample() {
CTrace::SetLevel(4);
HRESULT OnDraw(ATL_DRAWINFO&
di) {
const CComQIPtr<IOleInPlaceSiteWindowless>
pOleInPlaceSiteWindowless = m_spClientSite;
ATLTRACE(_T("m_spClientSite 0x%p, pOleInPlaceSiteWindowless 0x%p, m_hWnd 0x%08X\n"), m_spClientSite, pOleInPlaceSiteWindowless, m_hWnd);
... Sample.h(118) : atlTraceGeneral - m_spClientSite 0x0000027A9CA7B460, pOleInPlaceSiteWindowless 0x0000000000000000, m_hWnd 0x0105069C ... Sample.h(118) : atlTraceGeneral - m_spClientSite 0x0000027A9CA7B460, pOleInPlaceSiteWindowless 0x0000000000000000, m_hWnd 0x0105069C