質問者
ActiveXを挿入したVC++のプログラムをサービス化したい

質問
-
お世話になります。
表題のとおり、ActiveXを挿入したVC++のプログラムをサービス化したいと思っております。
とりあえず組んでは見たのですがエラーが出てしまいます。
エラー内容
Debug Assertion Failed!
File:f:\vctools\vc7libs\ship\atlmfc\src\mfc\oleinit.cpp line:78
・・・・・
ActiveXをない状態にすると、普通にサービス化はできます。
ソースを載せてない状態でいえる言葉じゃないかもしれませんが、何かアドバイス、もしくは参考になるホームページ等ありませんでしょうか?
よろしくお願いします。
すべての返信
-
MFCはソースがついているのだから探してみてはどうでしょう。結構勉強になります。
まず、AfxWinInit()の定義を探してみるとafxwin.hにあり、"Advanced initialization: for overriding default WinMain"というコメントがついています。つまりWinMain(Cでいうところのmain())のかわりだよということが書かれています。
そして、この実体はといえば、<VSインストールディレクトリ>\VC\atlmfc\src\mfc\appinit.cppにあります。これをみれば少なくともAfxWinInit()が何をやっているかはわかります。
私はこの件で回答を持っているわけではないので、探し方だけ…ということで。Visual Studio 2005になってから、検索(grep)先のフォルダセットが任意で登録できるようになって便利になりました。今までcrtとかMFCのソース探すとき、秀丸のgrepではあっというまにフォルダがいなくなるので、面倒でした
。
-
VisualStudio2005 で MFC アプリケーションを選択して、ダイアログベース、ActiveX コントロールにチェックを入れてある状態で発生するわけですね…。
この場合には、MFC の初期化は CWinApp の中で実行されているでしょうから、AfxWinInit の呼び出し云々の問題は外れていそうです。
# エントリポイントをいじられたりはしていらっしゃらないのですよね?(プロジェクトのプロパティからリンカの設定→詳細で見ることができます)
「新規プロジェクトの作成、MFC アプリケーションを選択、ダイアログベースを選択、ActiveX コントロールを使用するにチェックを入れる」で作成したプロジェクト(MFCはDLL使用)で、リソースを開いて、右クリックメニューで ActiveX コントロールを挿入、Calendar Control 11.0 を追加…では再現できませんでした。
どんな ActiveX コントロールを追加しても、その assertion failed は発生するのでしょうか?
-
I get the same trouble and I solved it with below step.
First, i search "AfxOleInit“ in project, and I find the it at 78 line.
then, i replace it like this, to avoid the program called the AfxOleInit once more which casue the assert problem.
#if 1
_AFX_THREAD_STATE* pState = AfxGetThreadState();
if (pState->m_bNeedTerm)
AfxOleInit();
#else
AfxOleInit();
#endif