私はMFCのDLL共有と私のWin32アプリケーションのコーディングだと私は、ActiveXがそれにを制御使用しようとしていましたか?または私はただ時間を無駄にしていますか?は、win32アプリケーションでactiveXコントロールを使用することは可能ですか?ことは可能であるが、
答えて
新しいMFCプロジェクトを作成し、あなたはActiveXのサポート(例VS2008を使用して)を起動してください:
多くの場合、あなたはダイアログウィンドウ内からActiveXコントロールを使用します。右のデザイナービューでダイアログをクリックすると「挿入ActiveXコントロール」を選択し、希望のActiveXを選択:
あなたは自由にダイアログ外のActiveXコントロールを埋め込みたい場合は、ATLのラッパーがありますMFCの場合しかし、これはもう少し難しく、次のようになります。
#include "stdafx.h"
#include "atlbase.h"
#include "oleidl.h"
#include "comdef.h"
...
...
AtlAxWinInit();
pPluginWnd = new CAxWindow();
CRect r = GetParent()->GetClientRect();
if (!pPluginWnd->Create(GetParent()->m_hWnd, r, "ActiveX Plugin Window", WS_VISIBLE
| WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_VSCROLL | WS_HSCROLL)))
{
AfxMessageBox("Couldn't create the ActiveX host window");
return;
}
LPUNKNOWN pUnk;
pPluginWnd->QueryControl(&pUnk);
IDispatch *spDispatch;
HRESULT hRes = pUnk->QueryInterface(__uuidof(spDispatch), (void **) &spDispatch);
if (hRes != S_OK)
{
AfxMessageBox("Couldn't query the ActiveX interface");
return;
}
// get a method called 'Init' in the ActiveX to pass a long integer parameter to it
long nMyValueToPass;
DISPID dispid;
OLECHAR FAR szMember[5];
MultiByteToWideChar(CP_ACP, 0, "Init", -1, szMember, 5);
OLECHAR FAR *pszMember = szMember;
DISPPARAMS dispparams = { NULL, NULL, 0, 0 };
VARIANT vRet;
COleVariant vParam(nMyValueToPass,VT_I4);
EXCEPINFO excepinfo;
UINT nArgErr;
dispparams.rgvarg = (LPVARIANT)vParam;
dispparams.cArgs = 1;
dispparams.cNamedArgs = 0;
hRes = spDispatch->GetIDsOfNames(IID_NULL, &pszMember, 1, LOCALE_SYSTEM_DEFAULT, &dispid);
if (hRes != S_OK)
{
AfxMessageBox("Init method couldn't be found in ActiveX control");
return;
}
// call the Init method
hRes = spDispatch->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD, &dispparams, &vRet, &excepinfo, &nArgErr);
[新規プロジェクト]ウィザードでActiveXサポートを有効にする必要はありません。このオプションを有効にして作成されていないプロジェクトにActiveXコントロールを追加することはできます。それはどんな種類の魔法も実行しません。コードを追加するだけです。それに加えて、C++からの 'IDispatch'インターフェイスを介してActiveXコントロールを呼び出すことは、ActiveXコントロールの最も一般的な使用例です。実装は*非常に混乱しています。 'L" Init "文字列リテラルを使って' MultiByteToWideChar'を呼び出す根拠は何ですか?またはRAIIラッパーと裸の 'VARIANT'の幸せな混合物? – IInspectable
* sigh *申し訳ありませんが、私はあなたに前に言ったと思います。私はperectではありません。しかし、私の具体的な実装の詳細はここでは関心事ではありません。それは実際には歴史的な非ユニコードソースで、VSから6回またはそれ以前のものです。説明するために変更されましたが、最適化されていません。そして、はい、ダイアログボックスでActiveXコントロールを使用することは、通常の使用例です。副詞「しばしば」で表現しようとしました。しかし、私はちょうどニックピッカーを恐れて、私の答えはゴミであると言いました。なぜなら質問にはActiveXがダイアログ内で使われなければならないということが明記されていなかったからです。 – thomiel
C++のActiveXコントロールの 'IDispatch'インターフェースを通ることは、最も一般的な使用事例ではないことを指摘しておくのは愚かではありません。静的に型付けされたインターフェースを照会し、 'IDispatch'の25行以上の行を1つの呼び出しに集約します。コンパイラによって静的にチェックされます。私はこのことのどれがダイアログと関係があるのか分かりません。 – IInspectable
- 1. このページのActiveXコントロールは安全でない可能性があります
- 2. ブロードキャストをアプリケーションに適用することは可能ですか?
- 3. C++でアプレットを使用することは可能ですか
- 4. ライブラリでThreadPoolを使用することは可能ですか?
- 5. スプリングブートでマイクロサービスを使用することは可能ですか
- 6. Eigenをcで使用することは可能ですか?
- 7. vimをマウスで使用することは可能ですか
- 8. レポートでカスタムフィールドを使用することは可能ですか
- 9. iOSでTTSを使用することは可能ですか
- 10. xulでjqueryを使用することは可能ですか?
- 11. UIWebViewでiframeを使用することは可能ですか?
- 12. スクリプトコンポーネントでOleDbConnectionsを使用することは可能ですか?
- 13. cでシリアルポートクラスを使用することは可能ですか?
- 14. CTestでOpencoverを使用することは可能ですか?
- 15. BackJone.jsでExtJSを使用することは可能ですか?
- 16. CallerMemberNameAttributeをfで使用することは可能ですか?
- 17. ORをSelenium.Clickで使用することは可能ですか?
- 18. SilverlightアプリケーションでF5をキャッチすることは可能ですか?
- 19. AnglesJSアプリケーションでTypescriptを使用することは可能ですか?
- 20. Ionic2/Angular2アプリケーションでHTTPS/SSLを使用することは可能ですか?
- 21. コントロールの可視性をコンテンツにバインドすることは可能ですか? (XAML)
- 22. CMYKカラーピッカーを使用することは可能ですか?
- 23. Out ParameterExpressionを使用することは可能ですか?
- 24. Spring MVC + PrimeFacesを使用することは可能ですか?
- 25. Grailsでproguardを使用することは可能です
- 26. Windowsアプリケーションを自動化することは可能ですか?
- 27. ボーダーレスUWPアプリケーションを作成することは可能ですか?
- 28. ipadアプリケーションをrelauchesすることは可能ですか?
- 29. アプリケーションをdrupalモジュールにすることは可能ですか?
- 30. Angular2アプリケーションをネストすることは可能ですか
はい、可能ですが、それは恐ろしいことがあります。より具体的な質問がなければ何も言い難い。 – mnistic
@mnisticコメントありがとうございました.MFC共有DLLを使用してWin32アプリケーションでActiveXコントロールを使用する方法についていくつかのドキュメントやチュートリアルなどの知識を得ることができますか? –
@EricsonGomesこれはMFCとは関係ありません。 MFC以外のWindowsアプリケーションの多くは、ActiveXコントロールをホストします。 –