三行のシャーマニズム

WinWordを実行し、1つの素晴らしいサイトのドキュメントに行を挿入する方法を学びました: http : //jmvidal.cse.sc.edu/csce790/PS4/



これは何ですか、 Microsoft OLEオートメーションテクノロジは非常に広く説明されており、10年以上使用されているからです。 そして、ここで驚くべきことは、DO_WORD関数が別のプロジェクトに転送されたときにエラーが発生し、Wordが起動したくなかったことです。 これは、プロジェクトがC ++で記述されているという事実にもかかわらず、残念ながらMFCテクノロジーを使用していません。 すべてのマニュアルに示されているようにOLEの初期化が進行するため、何も機能しないのはなぜですか? これだけでは不十分であり、MFCライブラリを追加で初期化する必要があることがわかります。 これを行う方法?



結果として、プロジェクトの役割を果たし、以下のソースの形式で表示される2つのプログラムが最初のプログラムにあります。DO_WORD関数は_tWinMain()からすぐに呼び出されます。 上記のリンクから取得した2番目のプログラムでは、最初にMFCを介してダイアログが作成され、DO_WORDが呼び出されます。 予想どおり、最初のプログラムは動作を拒否し、2番目のプログラムは正常に動作します。



次に、2番目のプログラムは、デバッガーで説明できないシャーマニズムにさらされました。 その結果、最初のコードが完成し、以下に提案するコードがユーザーの注意を引くために判明しました。 WinWordの通常の起動と本格的な作業につながるのは、3行のシャーマニズムのみです。



wordmain.cppファイル:

#include "stdafx.h" #include "msword9.h" void DO_WORD(void) { AfxOleInit(); AfxEnableControlContainer(); //start word COleVariant covTrue((short)TRUE), covFALSE((short)FALSE), covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); _Application app; Documents Docs; _Document Doc; Selection Select; _Font Font; Find myFind; if (!app.CreateDispatch("Word.Application")) { AfxMessageBox ("Couldn't start Word"); return ;//FALSE; } app.SetVisible(TRUE); CString fileName = "C:/MyDocFile.doc"; Docs = app.GetDocuments(); Doc = Docs.Add(covOptional,covOptional,covOptional,covOptional); Select = app.GetSelection(); //Get Current font object and change it Font = Select.GetFont(); Font.SetBold(TRUE); Font.SetItalic(TRUE); Font.SetSize(18); Select.TypeText("Hello this is a Word doc.\n"); /* Doc.SaveAs(COleVariant(fileName), covOptional,covOptional,covOptional, covOptional,covOptional,covFALSE,covOptional, covOptional,covOptional,covOptional); //Doc.Close(covFALSE, covOptional, covOptional); app.Quit(covFALSE,covOptional,covOptional); */ AfxOleTerm(); } extern "C" int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { //   AFX_MODULE_STATE* pModuleState = AfxGetModuleState(); pModuleState->m_bDLL = 0; CWinApp *theApp = new CWinApp; DO_WORD(); delete theApp; return 0; }
      
      







compile.batコンパイルファイルは、Visual Studio 2010と古いVisual Studio 6.0の両方に適しています。 その中で、2つのファイル、上記のwordmain.cpp、およびリンク指示に従って取得できるmsword9.cppをコンパイルします。つまり、Ctrl-Wを押してから[オートメーション]タブで[新しいクラスを追加]ボタンをクリックし、 C:¥Program Files¥Microsoft Office¥Office¥msword9.olb



Compile.batコンパイルファイル:

 rem Visual Studio 2010 call "C:\Program Files\Microsoft Visual Studio 10.0\VC\BIN\vcvars32.bat" rem Visual Studio 6.0 rem call "C:\Program Files\Microsoft Visual Studio\VC98\BIN\vcvars32.bat" mkdir Release cl /nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_AFXDLL" /D "_MBCS" /Fo".\Release\\" /Fd".\Release\\" /FD /c "wordmain.cpp" "msword9.cpp" link /nologo /subsystem:windows /incremental:no /machine:I386 /out:".\Release\wordmain.exe" ".\Release\wordmain.OBJ" ".\Release\msword9.obj"
      
      







UPD: msword9.cppを含むこの投稿のソースをstatja.rarファイル 投稿しました。



All Articles