Created
September 17, 2024 05:50
-
-
Save bg1bgst333/38766c253b3249e3f506bc67c89b5792 to your computer and use it in GitHub Desktop.
Application#Excel::Visible#put
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ヘッダのインクルード | |
// 既定のヘッダ | |
#include <windows.h> // 標準WindowsAPI | |
#include <tchar.h> // TCHAR対応 | |
// 独自のヘッダ | |
#include "Application.h" // Word::CApplication | |
// コンストラクタCApplication | |
Excel::CApplication::CApplication() { | |
} | |
// staticな生成関数CreateInstance. | |
Excel::CApplication * Excel::CApplication::CreateInstance() { | |
// 変数の宣言と初期化. | |
CLSID clsid; // CLSIDを格納するclsid. | |
IDispatch * pDispatch = NULL; // IDispatchポインタpDispatchをNULLで初期化. | |
// "Excel.Application"のCLSIDの取得. | |
HRESULT hr = CLSIDFromProgID(_T("Excel.Application"), &clsid); // CLSIDFromProgIDで"Excel.Application"のclsidを取得. | |
if (FAILED(hr)) { // 失敗. | |
return NULL; | |
} | |
// IDispatchポインタpDispatchの取得. | |
hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&pDispatch)); // CoCreateInstanceで, pDispatchを生成. | |
if (FAILED(hr)) { // 失敗. | |
return NULL; | |
} | |
// 成功. | |
CApplication *pApplication = new CApplication(); | |
pApplication->m_pDispatch = pDispatch; | |
return pApplication; | |
} | |
// デストラクタ~CApplication | |
Excel::CApplication::~CApplication() { | |
// m_pDispatchの解放. | |
if (m_pDispatch != NULL) { // m_pDispatchがNULLでなければ. | |
m_pDispatch->Release(); // IDispatch::Releaseで解放. | |
m_pDispatch = NULL; // NULLをセット. | |
} | |
} | |
// 表示・非表示プロパティ. | |
BOOL Excel::CApplication::put_Visible(BOOL bVisible) { | |
// メソッドやプロパティのDISPIDの取得. | |
LPOLESTR lpwszName = L"Visible"; // lpwszNameを"Visible"で初期化. | |
DISPID dispid; // DISPID型dispid. | |
HRESULT hr = m_pDispatch->GetIDsOfNames(IID_NULL, &lpwszName, 1, LOCALE_USER_DEFAULT, &dispid); // IDispatch::GetIDsOfNamesでdispid取得. | |
if (FAILED(hr)) { // 失敗. | |
return FALSE; | |
} | |
// メソッドやプロパティにアクセス. | |
VARIANT var; // VARIANT構造体var. | |
DISPPARAMS dispparams; // DISPPARAMS構造体dispparams. | |
DISPID dispidname = DISPID_PROPERTYPUT; // dispidnameをDISPID_PROPERTYPUTに初期化. | |
var.vt = VT_I4; // 4バイトint. | |
if (bVisible) { // TRUEなら. | |
var.lVal = 1; // 値は1. | |
} | |
else { | |
var.lVal = 0; // 値は0. | |
} | |
dispparams.cArgs = 1; // 引数の数は1. | |
dispparams.rgvarg = &var; // &varを指定. | |
dispparams.rgdispidNamedArgs = &dispidname; // &dispidnameを指定. | |
dispparams.cNamedArgs = 1; // cNamedArgsも1. | |
hr = m_pDispatch->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, NULL); // IDispatch::Invokeでアクセス. | |
if (FAILED(hr)) { // 失敗. | |
return FALSE; | |
} | |
// 成功. | |
return TRUE; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 二重インクルード防止 | |
#ifndef __EXCEL__APPLICATION_H__ | |
#define __EXCEL__APPLICATION_H__ | |
// 名前空間Excelの定義 | |
namespace Excel { | |
// アプリケーションクラスCApplicationの定義 | |
class CApplication { | |
// privateメンバ | |
private: | |
// privateメンバ変数 | |
IDispatch *m_pDispatch; // IDispatchポインタm_pDispatch. | |
// privateメンバ関数 | |
// コンストラクタ | |
CApplication(); // コンストラクタCApplication(newで生成不可.) | |
// publicメンバ | |
public: | |
// publicメンバ関数 | |
// staticメンバ関数 | |
static CApplication * CreateInstance(); // staticな生成関数CreateInstance. | |
// デストラクタ | |
virtual ~CApplication(); // デストラクタ~CApplication | |
// メンバ関数 | |
BOOL put_Visible(BOOL bVisible); // 表示・非表示プロパティ. | |
}; | |
} | |
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ヘッダファイルのインクルード | |
// 既定のヘッダ | |
#include <windows.h> // 標準WindowsAPI | |
#include <tchar.h> // TCHAR対応 | |
// 独自のヘッダ | |
#include "Excel/Application.h" // Excel::CApplication | |
// _tmain関数の定義 | |
int _tmain(int argc, TCHAR *argv[]) { // main関数のTCHAR版. | |
// COMの初期化. | |
CoInitialize(NULL); // CoInitializeでCOMを初期化. | |
// Excel::CApplicationの生成 | |
Excel::CApplication *pApplication = Excel::CApplication::CreateInstance(); // Excel::CApplication::CreateInstanceで作成. | |
// 取得したpApplicationを出力. | |
_tprintf(_T("pApplication = 0x%08x\n"), (unsigned long)pApplication); // pApplicationを出力. | |
// アプリケーションの表示. | |
pApplication->put_Visible(TRUE); // Excel::CApplication::put_VisibleにTRUE渡して表示. | |
// pApplicationの破棄. | |
if (pApplication != NULL) { | |
delete pApplication; | |
} | |
// COMの終了処理. | |
CoUninitialize(); // CoUninitializeで終了処理. | |
// プログラムの終了. | |
return 0; // 0を返して終了. | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment